【发布时间】:2013-03-10 22:37:09
【问题描述】:
我创建了一个名为Liger 的Python 类,它扩展了一个名为Lion 的类和一个名为Tiger 的类。 Liger 类从 Lion 和 Tiger 继承了 speak() 方法,但语法仍然有效 - 不打印错误消息,但 Tiger 对 speak() 方法的实现是由Liger 继承。是否可以在 Python 中检测到类似这样的方法名冲突,以便在这种方式的方法名冲突时打印错误消息?
'''
Conflicting method names in python
'''
class Tiger():
@staticmethod
def speak():
print "Rawr!";
class Lion():
@staticmethod
def speak():
print "Roar!";
class Liger(Tiger, Lion):
pass
'''both superclasses define a speak() method, and I need a way to detect this type of conflict.'''
Liger.speak(); ''' this prints "Rawr" instead of printing an error message. '''
'''Is there any way to detect method name collisions like this one?'''
代码可以在这里在线测试和调试:http://ideone.com/xXOoVq
【问题讨论】:
-
不使用多重继承来解决问题?
-
@hughdbrown 这是一个关于 Python 中多重继承的问题,我认为多重继承在某些情况下非常有用(例如,使用类来模拟物种之间的生物学关系,其中不同亚种之间的杂交发生,所有物种都有一个共同的祖先)。我宁愿找到解决这个问题的方法,也不愿完全避免解决这个问题。
-
如果我正在创建某种史诗般的奇幻游戏,我可能会有这样一个场景,其中 Dragon 类继承自 Lizard 和 Reptile 类,其中 Lizard 和 Reptile 都继承自 Amphibian 类,其中类Amphibian 继承自 Fish 类。在这个(非常有趣的)场景中,多重继承绝对是必不可少的。
-
专业/现代游戏开发使用entity-component systems 而不是基于类的继承(当然不是多重继承)系统准确来说是因为这样的问题。是的,多重继承有其用途,但建模游戏实体不是其中之一!
标签: python inheritance multiple-inheritance python-2.x