有可能用它所在的类的类型来定义一个静态类成员吗



如何定义一个静态类成员的类型与它所在的类的类型相同?我直觉上是这样尝试的:

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模块中。。。那么在您的定义中,您可以创建模块范围的";常数";这将匹配类的不同实例化。我想,这将是一个更好的方法。

相关内容

最新更新