擅长:python、mysql、java
<p>通过比较实例字典的公共子集和基类本身,这样做似乎是最简单和足够的,例如:</p>
<pre><code>def detect_overridden(cls, obj):
common = cls.__dict__.keys() & obj.__class__.__dict__.keys()
diff = [m for m in common if cls.__dict__[m] != obj.__class__.__dict__[m]]
print(diff)
def f1(self):
pass
class Foo:
def __init__(self):
detect_overridden(Foo, self)
def method1(self):
print("Hello foo")
method2=f1
class Bar(Foo):
def method1(self):
print("Hello bar")
method2=f1 # This is pointless but not an override
# def method2(self):
# pass
b=Bar()
f=Foo()
</code></pre>
<p>运行并给出:</p>
<pre class="lang-none prettyprint-override"><code>['method1']
[]
</code></pre>