我想区分继承方法和重载或新定义的方法。这可能用 Python 实现吗?
例子:
class A(object):
def spam(self):
print 'A spam'
def ham(self):
print 'A ham'
class B(A):
def spam(self):
print 'Overloaded spam'
def eggs(self):
print 'Newly defined eggs'
期望的功能:
>>> magicmethod(B.spam)
'overloaded'
>>> magicmethod(B.ham)
'inherited'
>>> magicmethod(B.eggs)
'newly defined'
是否有像示例中那样的“魔术方法”,或者有什么方法可以区分这些类型的方法实现?
最佳答案
我不确定这是个好主意,但您可以通过使用 hasattr
和 __dict__
来实现。
def magicmethod(clazz, method):
if method not in clazz.__dict__: # Not defined in clazz : inherited
return 'inherited'
elif hasattr(super(clazz), method): # Present in parent : overloaded
return 'overloaded'
else: # Not present in parent : newly defined
return 'newly defined'
关于python - 有没有办法在 Python 中识别继承的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751930/