我是新手学习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)
我正在按照以下方式初始化类,并期望首先打印出 "Testing new":
def Main():
vec = Vector2D(1,2)
print "Printing vec:",vec
但我只得到了输出。
Printing vec: X:1,Y:2
在__new__()
方法中,我需要做什么才能打印出"Testing new"?
谢谢。
class Vector2D:
改为class Vector2D(object):
解决了问题,但我还需要将参数从def __new__(cls):
改为def __new__(cls,x,y):
。 - Ayubx__new__
方法中不需要任何参数,因此不要将它们传递给上层”,您的意思是这样做:def __new__(cls, *args, **kw)
而不是def __new__(cls, x,y)
? - Ayubxdef __new__(cls, x, y)
也可以正常工作,但如果你将__init__
添加了更多参数,你也必须将它们添加到__new__
中。我写的版本是通用的,所以它会忽略任何参数,无需进一步编辑。无论哪种方式在这里都是可接受的。 - Duncan