我的相关问题
在成道的道路上,我抽了很多手册:)
在目录"计划"中,我们有一些文件:">
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
在线演示