是否有一种巧妙的方法可以在类本身内部使用A的实例来初始化A的类变量?
否,您不能在该类内部使用同一类实例初始化一个类属性 **,因为类的主体首先执行,而您的类在主体执行完成之前未定义。但是也许您可以使用装饰器。我不确定是否比A.X = A("special message")
更喜欢它,但是您可以使用:
def add_class_property(name,arg):
class ClassWrapper:
def __init__(self,cls):
self.other_class = cls
setattr(self,name,cls(arg))
def __call__(self,*cls_ars):
return self.other_class(*cls_ars)
return ClassWrapper
@add_class_property("X","special message")
class A:
def __init__(self,msg):
self.s = msg
print(A.X.s)
# Output:
# special message
如果要一次分配多个实例,可以执行以下操作:
def add_class_properties(**kwargs):
class ClassWrapper:
def __init__(self,cls):
self.other_class = cls
for key,val in kwargs.items():
setattr(self,key,cls(val))
def __call__(self,*cls_ars):
return self.other_class(*cls_ars)
return ClassWrapper
@add_class_properties(X="special message",Y="another message")
class A:
def __init__(self,msg):
self.s = msg
print(A.X.s)
print(A.Y.s)
special message
another message
**:您可以在类的方法中进行操作,但这是另一回事。
本文链接:https://www.f2er.com/2228045.html