我是python的新手并在课堂上尝试.我明白之间的差别__init__和__new__.这是我班级的一小部分,
class Vector2D:
def __new__(cls):
print "Testing new"
return super(Vector2D,cls).__new__(cls)
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "X:" + str(self.x) + ",Y:" + str(self.y)
Run Code Online (Sandbox Code Playgroud)
我正在初始化类,如下所示,并期望首先打印"Testing new":
def Main():
vec = Vector2D(1,2)
print "Printing vec:",vec
Run Code Online (Sandbox Code Playgroud)
但我只得到输出,
Printing vec: X:1,Y:2
Run Code Online (Sandbox Code Playgroud)
__new__()在打印"测试新" 的方法中我该怎么做?
谢谢.
你必须使你的Vector2D类成为一个子类,object否则很多东西将无法正常工作.不起作用的东西包括__new__和super.
这应该工作得很好:
class Vector2D(object):
def __new__(cls, *args, **kw):
print "Testing new"
return super(Vector2D,cls).__new__(cls)
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "X:" + str(self.x) + ",Y:" + str(self.y)
Run Code Online (Sandbox Code Playgroud)
请注意,构造实例时使用的参数都被传递给__new__,__init__因此您必须准备接受它们__new__,但是您的超类(object)不会在其__new__方法中接受任何参数,因此不要将它们传递给链.
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |