【发布时间】:2015-06-16 17:13:14
【问题描述】:
我正在为 3D 应用程序开发一个库,该库将应用程序的功能包装到一组 Python 类中,并添加应用程序没有的其他功能。
我的基类中有一组属性,可以使用现有 API 向节点添加属性,但我想要一种更优雅的动态添加属性的方式。我目前有这段代码(如果不熟悉 3D 应用程序可能没有多大意义),但重要的是
# Add block properties
和
# PROPERTIES
代码。
class Block(pyunify.Transform):
def __init__(self, name = "Character"):
pyunify.Transform.__init__(self, name)
self.LockTransform()
class Spine(Block):
def __init__(self, name = "Character", numberOfJoints=6):
Block.__init__(self, name+"_spine")
# Add block properties
self.AddAttr("numberOfJoints", "long")
self.SetAttr("numberOfJoints", numberOfJoints)
# Create block template
self.Template()
# PROPERTIES
@property
def numberOfJoints(self):
return self.GetAttr("numberOfJoints")
@numberOfJoints.setter
def numberOfJoints(self, num):
self.SetAttr("numberOfJoints", num)
所以我可以预见到有更多属性的其他类,以及我现在拥有它的方式,对于每个属性,我必须在 _init__ 中添加它
self.AddAttr("numberOfJoints", "long")
self.SetAttr("numberOfJoints", numberOfJoints)
然后我必须在我的类中为该属性添加 2 个附加函数,一个 getter 和 setter,以便我可以在我的类中将它称为 self.numberOfJoints 并且它将与类本身交互以及设置3D 应用程序中伴随节点上的正确属性。
@property
def numberOfJoints(self):
return self.GetAttr("numberOfJoints")
@numberOfJoints.setter
def numberOfJoints(self, num):
self.SetAttr("numberOfJoints", num)
与附加属性函数的唯一区别是名称,所以我想知道是否有一种方法可以在我的基 Block 类中创建一个 AddProperty 函数,以便我可以在我的 _init__ 函数中执行此操作:
self.AddProperty("numberOfJoints", "long")
self.numberOfJoints = 5
除了运行当前的 _init__ 行之外,它还会动态创建 getter 和 setter 函数
self.AddAttr("numberOfJoints", "long")
任何帮助将不胜感激!
谢谢!
【问题讨论】:
-
你只是想做
self.numberOfJoints = numberOfJoints吗? -
我正在尝试执行
self.numberOfJoints = numberOfJoints,其中设置属性将运行以下附加功能:self.AddAttr("numberOfJoints", "long"); self.SetAttr("numberOfJoints", self.numberOfJoints)和其他代码
标签: python class properties maya