我试图在python中调用class对象的构造函数。我设法通过以下几行使其起作用:

obj = cls.__new__(cls)
n = (List of attribute names)
v = (List of attribute values)

for s in n:
    setattr(obj, s, v[s])


我想知道是否有一种方法可以直接将属性值和名称对插入构造函数中,因为如果我调用以下命令,则只会忽略参数:

obj = cls.__new__(cls, v)


附:我正在使用python3

该类看起来类似于:

class InheritingClass(BaseClass):
    def __init__(self, basic_attribute, another_attribute=None):
        super().__init__(basic_attribute=basic_attribute)
        self.another_attribute= another_attribute

class BaseClass:
    def __init__(self, basic_attribute=1):
       self.basic_attribute= basic_attribute


所以那里没什么特别的

最佳答案

我想知道是否有一种方法可以直接将属性值+名称对插入构造函数中


请不要那样做。这将是反模式。而是使用__init__方法设置值。 __new__方法应该是返回对象实例(在您的情况下为obj)的内存空间分配。

因此,您最好在__init__内部执行此操作:

k = ['a', 'b', 'c']
v = [1, 2, 3]
d = dict(zip(k, v))

class C:
    def __init__(self, d):
        for _ in d:
            setattr(self, _, d[_])

ci=C(d)
print(ci.a) # 1


我使用dict作为__init__参数,在其中使用zip方法创建一个。

关于python - 在Python中调用cls对象的构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39116035/

10-16 12:22