我试图在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/