【问题标题】:How do I define a class where the arguments given to it on instantiation becomes its instance variables?如何定义一个类,其中实例化时赋予它的参数成为它的实例变量?
【发布时间】:2014-06-05 17:48:33
【问题描述】:

我想创建一个类,其实例的属性在实例化时定义。

一开始我觉得我应该做这样的事情,

class TestData(object):  # Example via http://stackoverflow.com/questions/2641484/class-dict-self-init-args

    def __init__(self, *args, **kwargs):
        super(TestData, self).__init__()
        for arg in args:
            self.arg = arg

但这会将所有参数分配给同一属性self.arg,这将不起作用。

【问题讨论】:

    标签: python attributes instantiation


    【解决方案1】:

    根据 cmets 的建议进行了修改,我找到了适合我的解决方案:

    class TestData(object):  # Example via http://stackoverflow.com/questions/2641484/class-dict-self-init-args
    
        def __init__(self, *args, **kwargs):
            super(TestData, self).__init__()
            self.__dict__.update(kwargs)
            for arg in args:
                setattr(self, arg, arg)
    

    如果在实例化之后需要添加更多属性,可以通过调用setattr(instancename, arg, val)来完成

    【讨论】:

    • 现在我想知道如何定义一个类方法来调用它可以轻松打印出所有属性。
    • 在这两种情况下都无需致电__setattr__。一般来说,您应该避免直接调用双下划线魔术方法。只需setattr(self, arg, arg)
    • 与其覆盖 dict 不如更新它:self.__dict__.update(**kwargs).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2021-05-11
    • 2017-03-19
    相关资源
    最近更新 更多