【问题标题】:Is this possible to dynamically to generate an attribute in a python object?这是否可以在 python 对象中动态生成属性?
【发布时间】:2011-11-04 02:09:55
【问题描述】:

比如对象只有两个属性,person对象,在这个例子中, 只有名字和第二个名字。 这是否可以即时制作性别属性?谢谢。

【问题讨论】:

    标签: python object dynamic python-3.x


    【解决方案1】:

    简短回答:是的

    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可能不存在,一定要抓住它。
    【解决方案2】:

    如果你在编写代码时甚至知道这个属性被调用,你可以

    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__、旧式类、属性、其他属性访问覆盖,可能甚至更多)可能不是大多数,但绝对足够普遍考虑。
    • @delan:按照你的建议修复它。
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2012-03-04
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多