是否可以生成一个继承自基类的namedtuple
?
我想要的是Circle
和Rectangle
是namedtuple
并且是从公共基类('Shape')继承的:
from collections import namedtuple
class Shape:
def addToScene(self, scene):
...
Circle=namedtuple('Circle', 'x y radius')
Rectangle=namedtuple('Rectangle', 'x1 y1 x2 y2')
我该怎么做?
答案 0 :(得分:2)
你可以试试这个:
class Circle(Shape, namedtuple('Circle', 'x y radius')):
pass
(您应该考虑在所有三个类中添加__slots__
以节省内存和快速查找。)
答案 1 :(得分:1)
对于任何正在寻找一种方法来实现派生自另一种类型的不可变类型的人来说,冻结的 dataclass
或 attrs
可能是比 namedtuple
更好的选择。
使用 dataclass
的示例:
class Base:
def fun(self):
print('Base()')
@dataclass(frozen=True)
class MyType(Base):
x: int
这样,您可以在 fun()
实例上调用 MyType
:
my_type = MyType([1, 2])
my_type.fun()
但不能分配给其成员:
my_type = MyType([1, 2])
#my_type.x = [10, 20]
注意可变成员仍然可以修改:
my_type = MyType([1, 2])
my_type.x[0] = 10