Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何定义一个类,在这个类中,实例化时提供给它的参数成为它的实例变量?_Python_Attributes_Instantiation - Fatal编程技术网

Python 我如何定义一个类,在这个类中,实例化时提供给它的参数成为它的实例变量?

Python 我如何定义一个类,在这个类中,实例化时提供给它的参数成为它的实例变量?,python,attributes,instantiation,Python,Attributes,Instantiation,我想创建一个类,在这个类中,实例的属性是在实例化时定义的 一开始我觉得我应该这样做 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 i

我想创建一个类,在这个类中,实例的属性是在实例化时定义的

一开始我觉得我应该这样做

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
,这是行不通的。

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

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\uuuu
。通常,您应该避免直接调用双下划线魔术方法。只需执行
setattr(self,arg,arg)
。与其覆盖dict,不如更新它:
self.\uu dict\uuu.update(**kwargs)