gpt4 book ai didi

python - 如何创建一个返回类本身实例的静态类属性?

转载 作者:行者123 更新时间:2023-11-28 20:31:30 24 4
gpt4 key购买 nike

我编写了一个可以处理任意精度整数的类(仅用于学习目的)。该类采用整数的字符串表示形式,并将其转换为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com