python - 有没有办法在 Python 中识别继承的方法?

标签 python inheritance

我想区分继承方法和重载或新定义的方法。这可能用 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/

相关文章:

带有附件的 Python Sendmail?

c++ - 惰性构造 - 虚拟方法与 if-then stub setter/getter

python - reshape MultiIndex 以分离

python uwsgi 2.0 websocket实现

Python 和 PyQt。剪贴板内容到列表小部件

javascript - 2种更改javascript对象原型(prototype)的方法,它们之间有什么区别?

java - 在Java中使用泛型子类型对象创建泛型工厂

c# - ASP.NET UserControl 继承 - 从基类获取派生类控件

java - 如何处理关系数据库中的继承

python - 将列添加到表的左侧 - Python docx