gpt4 book ai didi

python - 通过装饰器将实例变量动态添加到Python中的类

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:15 27 4
gpt4 key购买 nike

我想通过装饰器来检测一个类,添加一些由类作者指定的实例变量。

我从以下代码开始,但这只是添加了变量,我想要实例变量(那些通常在 __ 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

关于python - 通过装饰器将实例变量动态添加到Python中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com