Python 扩展子类重载内置 Int 或 List 使用 Int() 括号与 List() 创建类和对象

问题描述 投票:0回答:1

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'
python list integer subclass built-in
1个回答
0
投票

问题是int和list是python类型。当你说 d=8 时,python 在 python 内置函数中将其设为 int 。然而,创建 int(8) 不会被覆盖。类似的逻辑也可以应用于您的列表对象。

© www.soinside.com 2019 - 2024. All rights reserved.