我编写了一个可以处理任意精度整数的类(仅用于学习目的)。该类采用整数的字符串表示形式,并将其转换为 BigInt
的实例以供进一步计算。
通常您需要数字零 和一,所以我认为如果类可以返回这些数字会很有帮助。我尝试了以下方法:
class BigInt():
zero = BigInt("0")
def __init__(self, value):
####yada-yada####
这行不通。错误:“未定义名称‘BigInt’”
然后我尝试了以下方法:
class BigInt():
__zero = None
@staticmethod
def zero():
if BigInt.__zero is None:
BigInt.__zero = BigInt('0')
return BigInt.__zero
def __init__(self, value):
####yada-yada####
这实际上非常有效。我不喜欢的是 zero
是一种方法(因此必须使用 BigInt.zero()
调用)这是违反直觉的,因为它应该只引用一个固定值。
所以我尝试将 zero
更改为属性,但随后编写 BigInt.zero
返回类 property
的实例而不是 BigInt
因为使用了装饰器。由于类型错误,该实例无法用于计算。
有解决这个问题的方法吗?
最佳答案
静态属性...?我们称静态属性为“属性”。这不是 Java,Python 是一种动态类型的语言,这样的构造确实会使事情过于复杂。
只需这样做,设置类属性:
class BigInt:
def __init__(self, value):
...
BigInt.zero = BigInt("0")
如果您希望它完全在类中定义,请使用装饰器(但请注意,这只是编写相同内容的一种更奇特的方式)。
def add_zero(cls):
cls.zero = cls("0")
return cls
@add_zero
class BigInt:
...
关于python - 如何创建一个返回类本身实例的静态类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520553/