取消从标准元组类继承

2024-09-26 18:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要默认情况下具有元组行为的变量实例。最初它必须正好是(1,1) 这就是为什么我创建了继承自tuple类的类。但一个新创建的对象最初等于(,)(不是我需要的(1,1))。在

我有以下代码,但它不能正常工作,如我所愿。在

class FooClass(tuple):

    def __init__(self):
        self = (1,1)

我需要新创建的对象像这样工作:

^{pr2}$

我做错了什么?在


Tags: 对象实例代码selfinitdef情况class
2条回答

小心点,自我是指客体。通过做

self = (1, 1)

您只是将变量self分配给一个新的元组,这个元组很快就会被垃圾回收。Self不是一个正确的python关键字,可以称之为“mike”或“something”

您正在__init__方法中重新绑定self;这不会改变在反弹之前引用的对象{}。您只需将局部变量指向新对象即可。在

然而,元组是不可变的,它们的子类也是不可变的。在调用__init__时,不能再改变self。在

您需要在这里使用__new__方法来影响实例的创建方式;__new__是构造函数,__init__是初始值设定项:

class FooClass(tuple):
    def __new__ (cls):
        return super(FooClass, cls).__new__(cls, (1,2))

演示:

^{pr2}$

请注意,最后一个表达式将再次生成元组;对对象进行切片仍将返回元组:

>>> type(t)
<class '__main__.FooClass'>
>>> type(t[:-1])
<type 'tuple'>

根据您要执行的操作,您可能需要重写一些container methods。在

相关问题 更多 >

    热门问题