如何定义一个静态类成员的类型与它所在的类的类型相同?我直觉上是这样尝试的:
class A:
def __init__(self,a,b,c,d):
...
default_element = A(1,2,3,4)
这给出了错误
名称"A"未定义
这将使设置/重置的代码变得简短而有序。有像这样的变通方法
class A:
def __init__(self,a=1,b=2,c=3,d=4):
...
或
class A:
def __init__(self,a,b,c,d):
...
@staticmethod
def getDefault():
return A(1,2,3,4)
但如果可能的话,我更喜欢默认元素,所以我们实际上有一个表示默认值的对象,而不是一个方法,并且你只能有一组默认值,而使用preferred选项,我可以有多个不同的模板对象。
我使用的是Python 3.6.9。
据我所知,这并不容易:(请参阅中的"One Gotcha to be Aware"https://stackoverflow.com/a/27568860/1256837)
但是有一个小的变通方法,我关注您提供不同模板的需求:
class _A:
def __init__(self, a=None):
self.a = a
def blubb(self):
return self.a**2
class A(_A):
template_default = _A(0)
template_1 = _A(5)
assert A.template_default.blubb() == 0
assert A.template_1.blubb() == 25
assert A(50).blubb() == 2500
然而,我认为这段代码有味道:我认为这不是一个好的实践。
但是,如果您将这个类放在python模块中。。。那么在您的定义中,您可以创建模块范围的";常数";这将匹配类的不同实例化。我想,这将是一个更好的方法。