我想通过装饰器来检测一个类,添加一些由类作者指定的实例变量。
我从以下代码开始,但这只是添加了类变量,我想要实例变量(那些通常在 __ init __ 中“声明”的变量)
执行此操作的 pythonic 方法是什么,同时允许类作者控制他们放入 __ init __ 中的内容?
def add_list_attributes(klass):
for attribute in klass.list_attributes:
setattr(klass, attribute, [])
return klass
@add_list_attributes
class Person(object):
list_attributes = [
'phone_numbers'
]
def __init__(self):
pass
p1 = Person()
p1.phone_numbers.append('01234')
print p1.phone_numbers
请您参考如下方法:
您可以创建一个自定义的 __new__ 方法:
def add_list_attributes(klass):
def new(cls, *args, **kwargs):
result = super(cls, cls).__new__(cls)
for attribute in klass.list_attributes:
setattr(result, attribute, [])
return result
klass.__new__ = staticmethod(new)
return klass
@add_list_attributes
class Person(object):
list_attributes = [
'phone_numbers'
]
def __init__(self):
pass
p1 = Person()
p2 = Person()
p1.phone_numbers.append('01234')
print p1.phone_numbers, p2.phone_numbers
