Python版本= 3.9.6 IDE = vscode
大家好,如果我没有使用正确的术语/术语,请原谅我。在以下方面确实需要您的帮助:
我正在尝试对内置的“int”和“list”类进行子类化/扩展/重载。
但是,根据我如何使用直接赋值或 int() 定义整数变量,我的扩展方法 toString() 仅在我应用 int() 时才有效。
list() 也会发生同样的情况。它还取决于如何使用 [] 或 list() 创建列表对象,并且仅适用于 list()。
为什么下面代码中的变量“b”和“d”不能访问 toString() 方法?
感谢您提前的帮助。
class int(int):
def __new__(cls, value): return super().__new__(cls, value)
def toString(self) -> str: return str(self)
c = int(8)
d = 8
print(c.toString())
print(d.toString()) # Error: 'int' object has no attribute 'toString'
class list(list):
def __init__(self, li): super(list, self).__init__(li)
def toString(self) -> str: return ' '.join(str(x) for x in self)
a = list([1,2,3])
b = [1,2,3]
print(a.toString())
print(b.toString()) # Error: 'list' object has no attribute 'toString'
问题是int和list是python类型。当你说 d=8 时,python 在 python 内置函数中将其设为 int 。然而,创建 int(8) 不会被覆盖。类似的逻辑也可以应用于您的列表对象。