为什么我不能执行如下操作:
class Test(object):
def __init__(self):
self = 5
t = Test()
print t
Run Code Online (Sandbox Code Playgroud)
我希望它打印,5因为我们用它覆盖了实例,但它根本没有做任何事情.甚至不会抛出错误.只是忽略了作业.
我知道几乎没有人愿意这样做的情况,但你不能这样做似乎很奇怪.
更新:我现在明白为什么它不起作用,但我仍然想知道是否有任何方法可以从实例中替换实例.
Ale*_*lli 62
任何简单的分配给任何的参数任何函数的行为确实是在Python以同样的方式:结合该名称不同的值,而没有别的任何责任."正如Python的禅宗所说,没有特殊情况足以打破规则" - )
因此,远非奇怪(简单地说=在特定函数中指定特定参数没有任何外部可见效果),如果这个特定情况以任何其他方式起作用,那将是完全惊人的,仅仅因为它的名称有问题的功能和论点.
如果你想创建一个构造一个不同于自身类型的对象的类,这种行为当然是很有可能的 - 但它是通过覆盖特殊方法获得的__new__,而不是 __init__:
class Test(object):
def __new__(cls):
return 5
t = Test()
print t
Run Code Online (Sandbox Code Playgroud)
这确实会发出5.Python中的__new__/ __init__behavior是"两步构造"设计模式的一个例子:"构造函数"本身是__new__(它构建并返回一个(通常未初始化的)对象(通常是所讨论的类型/类的新对象); __init__是正确初始化新对象的"初始化程序".
这允许,例如,是不可变对象的构造一旦构造:在这种情况下,一切必须要做__new__给出对象是不可改变的,构造不可变对象之前,因为,__init__以初始化它不能发生变异它.
tru*_*ppo 10
它不会"忽略"任务.赋值工作正常,您创建了一个指向数据的本地名称5.
如果你真的想做你正在做的事......
class Test(object):
def __new__(*args):
return 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5995 次 |
| 最近记录: |