当前位置: 首页 > 面试题库 >

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

傅兴平
2023-03-14
问题内容

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

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:未绑定方法hello()必须以Foo实例作为第一个参数调用(取而代之的是Bar实例)

这样的事情可能吗?

我应该很清楚,我知道这是一个坏主意。显然,真正的解决方案是重构。我只是想必一定有办法,事实证明是有办法的。

感谢您的评论。


问题答案:

看起来像这样:

Foo.hello.im_func(bar)

您好,我是酒吧。

我想我需要阅读这有点困难…



 类似资料:
  • 问题内容: 我需要这样做:将值更改侦听器更改为JTextField 我想Condemwnci的解决方案,但我得到的是错误的路线: 在我的情况是: 就我而言,我想更新Jtable中的行,所以我的方法将是这样的: 我在Linux ubuntu 11.10上使用Eclipse(如果有的话)。 编辑: 我不明白为什么,但是它可以通过以下方式工作: 然后改写Implements方法,而不是全部在同一行中完成

  • 通过前面的学习,类方法大体分为 3 类,分别是类方法、实例方法和静态方法,其中实例方法用的是最多的。我们知道,实例方法的调用方式其实有 2 种,既可以采用类对象调用,也可以直接通过类名调用。 通常情况下,我们习惯使用类对象调用类中的实例方法。但如果想用类调用实例方法,不能像如下这样: 运行上面代码,程序会报出如下错误: Traceback (most recent call last):   Fi

  • 问题内容: 我需要这样做:将值更改侦听器更改为JTextField 我想Condemwnci的解决方案,但我得到的是错误的路线: 在我的情况是: 就我而言,我想更新Jtable中的行,所以我的方法将是这样的: 我在Linux ubuntu 11.10上使用Eclipse(如果有的话)。 编辑: 我不明白为什么,但是它可以通过以下方式工作: 然后改写Implements方法,而不是全部在同一行中完成

  • 问题内容: 我大概有以下内容。基本上,我需要从在其定义中用于实例方法的装饰器访问实例方法的类。 原样的代码给出: AttributeError:“函数”对象没有属性“ im_class” 我发现了类似的问题/答案-Python装饰器使函数忘记了它属于Python装饰器中的类和Get类-但它们依赖于一种解决方法,该解决方法在运行时通过抢夺第一个参数来获取实例。就我而言,我将基于从其类收集的信息来调用

  • 问题内容: 我想做的是这样的: 不必这样做: 在我的具体情况下,结果对我而言实际上并不重要。但是,有办法吗? 问题答案: 您要求的功能可从PHP 5.4获得。这是PHP 5.4的新功能列表: http://php.net/manual/zh/migration54.new- features.php 以及新功能列表中的相关部分: 添加了对实例化的类成员访问, 例如(new Foo)- > bar(

  • 每当我必须从另一个类调用一个方法时,我首先创建一个对象,然后通过该对象调用它。但是当我编写一些代码时,我错误地编写了并且它起作用了。 我通常会写, 以下是实际代码: 1类 在2班 我注意到< code>methodname()是静态的。那是原因吗?