如何正确地在具有类型(3 个参数)和 2 个祖先的__new__中构建一个类?



我的相关问题

在成道的道路上,我抽了很多手册:)

在目录"计划"中,我们有一些文件:">
scheme.py">
scheme_New.py">
scheme_New2.py">
...

在文件"scheme_New.py"(这是独特情况下的几个代码(中,我们有代码:

class Scheme:
def hi(self):
print('Hi from NEW')

在文件"scheme.py"(它是包含大量代码的主方案(中,我们有代码:

class Scheme:
def __new__(cls):
from schemes.scheme_New import Scheme as NewScheme
return type('Scheme', (NewScheme, cls), {})
def hi(self):
print('Hi from Base Scheme')  

然后我尝试(任何其他文件(:

from schemes.scheme import Scheme
scheme = Scheme()
scheme.hi()

我收到错误:

类型错误: hi(( 缺少 1 个必需的位置参数:"self">

为什么自我不通过?

我想用文件"scheme_New.py"中具有相同(重要(名称的类覆盖文件"scheme.py"中的基类"Scheme"并返回它。

请向我解释为什么会发生这种情况?我做错了什么?

它可以以不同的方式完成,但我希望这样。

我真的很想弄清楚这一点!
我感谢您的所有帮助。

我不知道你为什么想要这样的东西,但如果你坚持这样做,它是可以做到的。

您的代码实际上非常接近。它不起作用的原因是你只返回新创建的类对象而不是类的实例,因此永远不会有实例 (=self( 传递给hi方法。

要解决此问题,您只需使用创建的类型作为参数调用object.__new__

方案/scheme_New.py

class Scheme:
def hi(self):
print('Hi from NEW')

方案/方案.py

class Scheme:
def __new__(cls):
from schemes.scheme_New import Scheme as NewScheme
created = type('Scheme', (NewScheme, cls), {})
return object.__new__(created)
def hi(self):
print('Hi from Base Scheme')

main.py

from schemes.scheme import Scheme
scheme = Scheme()
scheme.hi()

输出:

Hi from Base Scheme

在线演示

最新更新