我正在搞乱继承的类,并想知道是否可以使用方法设置自定义对象属性。 它可以这样工作:
gluPerspective(45f, (float) WIDTH / (float) HEIGHT, 0.1f, 100f);
class MyClass(object):
def __init__(self):
super.__init__()
def setCustAttr(self, name, value):
#...
g=MyClass()
g.setCustAttr("var",5)
g.var+=6
g.var="text"
吗?答案 0 :(得分:6)
这是O(n log p)
函数的作用:
setattr
答案 1 :(得分:1)
传递给setCustAttr
的参数正是您传递给setattr
的参数。
def setCustAttr(self, name, value):
setattr(self, name, value)
为什么你想要setattr
的包装?您可以尝试执行一些验证:
def setCustAttr(self, name, value):
if name not in ['bar', 'baz']:
raise ValueError("Custom attribute must be 'bar' or 'baz'")
if name == 'bar' and value < 0:
raise ValueError("'bar' attribute must be non-negative")
if name == 'baz' and value % 2:
raise ValueError("'baz' attribute must be even")
setattr(self, name, value)
但是,这并不妨碍您的班级用户忽略您的setCustAttr
方法并直接指定该对象:
g = MyClass()
g.bar = -5 # Negative bar!
g.baz = 3 # Odd baz!
g.quux = 2 # Non-bar/baz attribute!
Python具有更强大的魔力,可以更好地控制如何在对象上设置属性(请参阅__slots__
,__{get,set}attr__
,__getattribute__
,属性等),但通常情况下,它们不是'仅用于防止上述示例。 Python的方法是记录如何使用类的实例,并信任用户遵守您的指示。 (如果他们不这样做,警告经纪人。)