cod*_*r2k 2 python oop properties
我编写了一个可以处理任意精度整数的类(仅用于学习目的).该类采用整数的字符串表示形式,并将其转换BigInt为进一步计算的实例.
通常你需要数字零和一,所以我认为如果课程可以返回这些将是有帮助的.我尝试了以下方法:
class BigInt():
zero = BigInt("0")
def __init__(self, value):
####yada-yada####
Run Code Online (Sandbox Code Playgroud)
这不起作用.错误:"名称'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####
Run Code Online (Sandbox Code Playgroud)
这实际上非常有效.我不喜欢的是,这zero是一种方法(因此必须被调用BigInt.zero()),这是违反直觉的,因为它应该只引用固定值.
所以我尝试改变zero成为一个属性,但然后写入BigInt.zero返回该类的实例property而不是BigInt因为使用了装饰器.由于类型错误,该实例不能用于计算.
有没有解决这个问题的方法?
静态属性......?我们将静态属性称为"属性".这不是Java,Python是一种动态类型语言,这样的构造实际上会使问题过于复杂.
只需这样做,设置一个类属性:
class BigInt:
def __init__(self, value):
...
BigInt.zero = BigInt("0")
Run Code Online (Sandbox Code Playgroud)
如果您希望将它完全封装在类块中,请使用类装饰器(但请注意,这只是编写相同内容的一种更奇特的方式).
def add_zero(cls):
cls.zero = cls("0")
return cls
@add_zero
class BigInt:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |