2024-09-26 18:19:26 发布
网友
我需要默认情况下具有元组行为的变量实例。最初它必须正好是(1,1) 这就是为什么我创建了继承自tuple类的类。但一个新创建的对象最初等于(,)(不是我需要的(1,1))。在
我有以下代码,但它不能正常工作,如我所愿。在
class FooClass(tuple): def __init__(self): self = (1,1)
我需要新创建的对象像这样工作:
我做错了什么?在
小心点,自我是指客体。通过做
self = (1, 1)
您只是将变量self分配给一个新的元组,这个元组很快就会被垃圾回收。Self不是一个正确的python关键字,可以称之为“mike”或“something”
您正在__init__方法中重新绑定self;这不会改变在反弹之前引用的对象{}。您只需将局部变量指向新对象即可。在
__init__
self
然而,元组是不可变的,它们的子类也是不可变的。在调用__init__时,不能再改变self。在
您需要在这里使用__new__方法来影响实例的创建方式;__new__是构造函数,__init__是初始值设定项:
__new__
class FooClass(tuple): def __new__ (cls): return super(FooClass, cls).__new__(cls, (1,2))
演示:
请注意,最后一个表达式将再次生成元组;对对象进行切片仍将返回元组:
>>> type(t) <class '__main__.FooClass'> >>> type(t[:-1]) <type 'tuple'>
根据您要执行的操作,您可能需要重写一些container methods。在
小心点,自我是指客体。通过做
您只是将变量self分配给一个新的元组,这个元组很快就会被垃圾回收。Self不是一个正确的python关键字,可以称之为“mike”或“something”
您正在}。您只需将局部变量指向新对象即可。在
__init__
方法中重新绑定self
;这不会改变在反弹之前引用的对象{然而,元组是不可变的,它们的子类也是不可变的。在调用
__init__
时,不能再改变self
。在您需要在这里使用
__new__
方法来影响实例的创建方式;__new__
是构造函数,__init__
是初始值设定项:演示:
^{pr2}$请注意,最后一个表达式将再次生成元组;对对象进行切片仍将返回元组:
根据您要执行的操作,您可能需要重写一些container methods。在
相关问题 更多 >
编程相关推荐