【发布时间】:2020-09-11 22:30:25
【问题描述】:
class character():
class personalized:
def __init__(self, name, age, height, width, hair_color, eye_color):
# I want to do this
for attr in personalized:
personalized.attr = attr
#instead of this
personalized.name = name
personalized.age = age
personalized.height = height
如果我使用具有很多属性的类,我不想每次都将其设置为等于一个变量,因为它会占用大量空间。有没有办法像我上面那样写但实际上有效。本质上我不知道如何从__init__ 函数中检索属性。
【问题讨论】:
-
属性在添加之前不存在。
__init__方法无法知道您要在类中使用哪些属性。 -
不能动态访问参数变量,除非使用
eval()。 -
还可以考虑重构类,这样它就不必拥有所有这些参数,因此必须在你的类中设置更少的变量。
-
将 kwargs 风格的 dict 传递给
init(),而不是单独的参数。这样你就可以遍历字典并提取变量名。 -
@Barmar
setattr(self,'parameter',value)将动态创建一个实例变量。
标签: python python-3.x class attr