在Python中,你可以调用类A的实例方法,但是传入一个B类的实例吗?

Jas*_*tes 6 python oop coding-style

为了重用一些被定义为不同类的实例方法的现有代码,我想要做类似以下的事情:

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)
Run Code Online (Sandbox Code Playgroud)

但结果是:

TypeError:必须使用Foo实例作为第一个参数调用未绑定方法hello()(改为使用Bar实例)

这样的事情可能吗?


我应该清楚,我知道这是一个坏主意.显然,真正的解决方案是一些重构.我只是觉得必须有一种方法,事实证明存在.

感谢您的评论.

Jas*_*tes 9

看起来像这样:

Foo.hello.im_func(bar)
Run Code Online (Sandbox Code Playgroud)

你好,我是吧.

我想我需要阅读有点困难...

  • 是的,但这是你永远不应该做的事情(除了了解它是如何工作的). (2认同)

Bri*_*ian 5

之所以发生这种情况,是因为python将类函数包装为执行此类型检查的"未绑定方法".有参与了这一决策的一些说明这里.

请注意,此类型检查实际上已在python 3中删除(请参阅该文章末尾的注释),因此您的方法将在那里工作.