Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写Python时复制原始行为';新方法_Python_Overriding_New Operator - Fatal编程技术网

重写Python时复制原始行为';新方法

重写Python时复制原始行为';新方法,python,overriding,new-operator,Python,Overriding,New Operator,假设我有以下课程 类点: 定义初始化(self,coords): self.coords=coords 类别行: 定义初始化(self、coords\u A、coords\u B): self.A=coords\u A self.B=coords\u B 我想在用coords\u a==coords\u B实例化行时得到一个点。我的理解是,我可以通过重写\uuuu new\uuu来实现这一点。以下是我尝试过的: 类行: 定义新(cls、协调A、协调B): 如果坐标A==坐标B: 返回点(coo

假设我有以下课程

类点:
定义初始化(self,coords):
self.coords=coords
类别行:
定义初始化(self、coords\u A、coords\u B):
self.A=coords\u A
self.B=coords\u B
我想在用
coords\u a==coords\u B
实例化
行时得到一个
点。我的理解是,我可以通过重写
\uuuu new\uuu
来实现这一点。以下是我尝试过的:

类行:
定义新(cls、协调A、协调B):
如果坐标A==坐标B:
返回点(coords_A)
return super()。\uuuu new\uuuu(cls、coords\u A、coords\u B)
定义初始化(self、coords\u A、coords\u B):
self.A=coords\u A
self.B=coords\u B
但是,这不起作用(调用
行(1,1)
可以满足我的要求,但是
行(1,2)
会引发
类型错误
)。也不应该,毕竟我并不真的想调用父类的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,我只想复制
行的原始行为。我该怎么做?

这似乎有效:

类点:
定义初始化(self,coords):
self.coords=coords
类别行:
定义新(cls、协调A、协调B):
如果坐标A==坐标B:
返回点(coords_A)
返回超级(行,cls)。\uuuu新建\uuuuu(cls)
定义初始化(self、coords\u A、coords\u B):
self.A=coords\u A
self.B=coords\u B

错误消息:
TypeError:object.\uuuu new\uuuuu()只接受一个参数(要实例化的类型)