2024-05-13 23:57:42 发布
网友
以下代码在Python 3.x中不起作用,但它以前用于旧样式的类:
class Extender: def extension(self): print("Some work...") class Base: pass Base.__bases__ += (Extender,) Base().extension()
问题很简单:如何在Python3.x中将超级类动态地(在运行时)添加到类中?
但我准备好了答案很难回答!)在
似乎可以动态更改Base.__bases__ 如果Base.__base__不是{}。(动态更改,我的意思是,所有从Base继承的预先存在的实例也会动态更改。否则请参见Mykola Kharechko's solution)。在
Base.__bases__
Base.__base__
Base
如果Base.__base__是某个伪类TopBase,那么对Base.__bases__的赋值似乎有效:
TopBase
class Extender(object): def extension(self): print("Some work...") class TopBase(object): pass class Base(TopBase): pass b=Base() print(Base.__bases__) # (<class '__main__.TopBase'>,) Base.__bases__ += (Extender,) print(Base.__bases__) # (<class '__main__.TopBase'>, <class '__main__.Extender'>) Base().extension() # Some work... b.extension() # Some work... Base.__bases__ = (Extender, TopBase) print(Base.__bases__) # (<class '__main__.Extender'>, <class '__main__.TopBase'>) Base().extension() # Some work... b.extension() # Some work...
这在Python2(用于新样式类和旧样式类)和Python3中进行了测试。我不知道为什么它能起作用,而这个却不能:
对我来说这是不可能的。但您可以动态创建新类:
class Extender(object): def extension(self): print("Some work...") class Base(object): pass Base = type('Base', (Base, Extender, object), {}) Base().extension()
似乎可以动态更改}。(动态更改,我的意思是,所有从
Base.__bases__
如果Base.__base__
不是{Base
继承的预先存在的实例也会动态更改。否则请参见Mykola Kharechko's solution)。在如果
Base.__base__
是某个伪类TopBase
,那么对Base.__bases__
的赋值似乎有效:这在Python2(用于新样式类和旧样式类)和Python3中进行了测试。我不知道为什么它能起作用,而这个却不能:
^{pr2}$对我来说这是不可能的。但您可以动态创建新类:
相关问题 更多 >
编程相关推荐