【发布时间】:2010-10-21 12:34:56
【问题描述】:
为了重用一些被定义为不同类的实例方法的现有代码,我打算执行以下操作:
class Foo(object):
def __init__(self):
self.name = "Foo"
def hello(self):
print "Hello, I am " + self.name + "."
class Bar(object):
def __init__(self):
self.name = "Bar"
bar = Bar()
Foo.hello(bar)
但这会导致:
TypeError: unbound method hello() must be called with Foo 实例作为第一个参数(改为获取 Bar 实例)
这样的事情可能吗?
我应该清楚我知道这是个坏主意。显然,真正的解决方案是进行一些重构。我只是想一定有办法,结果证明是有的。
感谢cmets。
【问题讨论】:
-
看起来 Python 给了你答案。无论如何,这是重用现有代码的错误方法。
-
为什么不想分解出通用功能并从 Foo 和 Bar 的实例方法中调用它?
-
是的,这显然是错误的做法。由于 Python 的动态特性,我只是假设它可以完成,当它没有按我预期的那样工作时有点惊讶。
-
-1:这种方法太不合理了,让我胆战心惊。如果可以做到,应该禁止故意误导。
-
请记住,Python 是强类型的,并且起源于 centre for mathematics。毫不奇怪,它会发出 TypeError 信号!
标签: python oop coding-style