本文的摘要显示了__bases__通过将类添加到继承它的现有类的类集合中来动态更改某些Python代码的继承层次结构的用法。好的,这很难看懂,代码可能更清晰:
class Friendly:
def hello(self):
print 'Hello'
class Person: pass
p = Person()
Person.__bases__ = (Friendly,)
p.hello() # prints "Hello"
也就是说,Person它不是从Friendly源级别继承的,而是通过修改__bases__Person类的属性在运行时动态添加此继承关系。但是,如果更改Friendly并Person成为新的样式类(通过从object继承),则会出现以下错误:
TypeError: __bases__ assignment: 'Friendly' deallocator differs from 'object'
对此进行一些谷歌搜索似乎表明新样式类和旧样式类在运行时更改继承层次结构方面存在一些不兼容性。具体来说:“新型类对象不支持对其bases属性的分配”。
我的问题是,是否可以使用Python 2.7+中的新型类,使上面的Friendly / Person示例工作,可能是通过使用__mro__属性?
免责声明:我完全意识到这是晦涩的代码。我完全意识到,在实际的生产代码中,这样的技巧往往难以理解,这纯粹是一个思想实验,并且让人们从中学习有关Python如何处理与多重继承相关的问题的知识。
至尊宝的传说
GCT1015
相关分类