gpt4 book ai didi

python - 在python中动态添加属性到__init__方法

转载 作者:行者123 更新时间:2023-12-01 03:57:34 24 4
gpt4 key购买 nike

有没有什么方法可以定义一个函数,该函数可以在程序稍后的某个时刻向现有的 __init__ 方法添加新属性?例如,下面我为家谱创建了一个类。每个实例都会创建一个根。

class FamilyTree:
def __init__(self,rootObj):
self.key = rootObj

我希望每个新的根实例都能够拥有特定数量的子属性:例如:

self.child1 = 'B'
self.child2 = 'C'
self.child3 = 'D'

由于每个新的根实例都可以有不同数量的子实例,因此我如何向 __init__ 方法添加新属性?

最佳答案

自动化此操作的可能方法如下:

class FamilyTree:
def __init__(self,rootObj, child_names=None):
self.key = rootObj
if child_names is not None:
# child_names is a list of child attributes values
for i, child in enumerate(child_names):
setattr(self, 'child{0}'.format(i), child)
setattr(self, 'child_nbr', len(child_names))

def add_child(self, *child_names)
for name in child_names:
self.child_nbr += 1
setattr(self, 'child{0}'.format(self.child_nbr), name)

用法:

>>> f=FamilyTree('Family1', ['B', 'C', 'D'])
>>> print(f.child1, f.child2, f.child3)
>>> i = 0
>>> while i < f.child_nbr:
>>> print getattr(f, 'child{0}'.format(i+1))
>>> f.add_child('E')
>>> print(f.child4)
>>> f.add_child('F', 'G')
>>> print(f.child5, f.child6)

关于python - 在python中动态添加属性到__init__方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177427/

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