【发布时间】:2011-11-04 02:09:55
【问题描述】:
比如对象只有两个属性,person对象,在这个例子中, 只有名字和第二个名字。 这是否可以即时制作性别属性?谢谢。
【问题讨论】:
标签: python object dynamic python-3.x
比如对象只有两个属性,person对象,在这个例子中, 只有名字和第二个名字。 这是否可以即时制作性别属性?谢谢。
【问题讨论】:
标签: python object dynamic python-3.x
简短回答:是的
class Person(object):
def __init__(self):
self.first_name = 'Will'
self.second_name = 'Awesome'
my_guy = Person()
my_guy.gender = "Male"
print(my_guy.gender)
将打印Male
【讨论】:
Person().gender,你会得到一个AttributeError,所以如果attr可能不存在,一定要抓住它。
如果你在编写代码时甚至知道这个属性被调用,你可以
my_guy = Person()
attr = 'secret_habit' # this could be read from file, keybrd etc.
value = 'wont tell you'
setattr( my_guy, attr, value)
print(my_guy.secret_habit)
我得到'不会告诉你'
【讨论】:
__dict__,使用setattr/getattr。访问实例字典是脆弱的,它在许多情况下失败(例如__slots__、旧式类、属性、其他属性访问覆盖,可能甚至更多)可能不是大多数,但绝对足够普遍考虑。