【发布时间】:2009-11-21 22:27:31
【问题描述】:
这是我的猜测,它不起作用:
class BaseClass(object):
def foo(self):
return 'foo'
def bar(self):
return 'bar'
def methods_implemented(self):
"""This doesn't work..."""
overriden = []
for method in ('foo', 'bar'):
this_method = getattr(self, method)
base_method = getattr(BaseClass, method)
if this_method is not base_method:
overriden.append(method)
return overriden
class SubClass(BaseClass):
def foo(self):
return 'override foo'
o = SubClass()
o.methods_implemented()
理想情况下,methods_implemented() 将返回 ['foo']。
怎么做?
(我为什么要这样做?我的基类是一个 HTTP 资源类,它具有 GET、POST 等方法。默认情况下,它们返回 405 Method Not Implemented。它还有一个方法 OPTIONS 应该返回 200 响应标头 Allow 设置为任何子类实现的方法。)
【问题讨论】:
-
为什么这是一个社区维基?
-
不确定您为什么要这样做。在任何类层次结构中,不应要求基类了解派生类的任何信息。如果需要,也许您的设计需要重新考虑。
-
我同意这不应该是 wiki:会有一个有效且可以接受的答案。另外,我很想了解更多关于您为什么要这样做的信息,不是因为您不应该这样做,而是因为这听起来像是解决问题的方法之一,而在其他地方却有更好且非常不同的解决方案。跨度>
-
嗯,不是答案,但我认为应该是“...如果 ths_method not base_method ...”
-
HTTPResource 类从哪里来?我在 python 中找不到任何这样的野兽。
标签: python