我试图在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)
p.s。:我正在使用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
那里没什么特别的
答案 0 :(得分:0)
__init__
是Python类的构造函数,而不是__new__
。有关详细信息,请参阅Pythons use of new and init。
答案 1 :(得分:0)
要添加,如果您想将任意属性存储到您的班级,您可以使用dict.update
,如下所示:
class BaseClass:
def __init__(self, basic_attribute=1, **kw):
self.basic_attribute = basic_attribute
self.__dict__.update(**kw)
class InheritingClass(BaseClass):
def __init__(self, basic_attribute, another_attribute=None, **kw):
super().__init__(basic_attribute=basic_attribute, **kw)
self.another_attribute = another_attribute
然后:
ic = InheritingClass('hi', a=1, b=20)
print(ic.a, ic.b) # prints 1, 20
答案 2 :(得分:0)
我想知道是否有一种方法可以直接将属性值+名称对插入构造函数中
请不要那样做。这将是反模式。而是使用__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
方法创建一个。