我正在处理继承的类,想知道是否可以使用方法设置自定义对象属性。它会像这样工作:
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"
exec("self."+string+"="+value)
吗?传递给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的方式是仅记录应如何使用类的实例,并让用户遵守您的指示。(如果不这样做,请告诫您。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句