调用类成员函数会产生 TypeError [重复]

Posted

技术标签:

【中文标题】调用类成员函数会产生 TypeError [重复]【英文标题】:Calling a class member function gives TypeError [duplicate] 【发布时间】:2016-07-24 14:39:52 【问题描述】:

我正在使用一个库,该库具有以下 Python 类代码(由我自己编辑以找到一个最小的工作示例):

class Foo(object):

  def __init__(self):
    self._bar = 0

  @property
  def Bar(self):
    return self._bar

如果我然后运行以下命令:

foo = Foo()
x = foo.Bar()

我收到一条错误消息:

TypeError: 'int' object is not callable

所以,似乎错误告诉我它认为Bar()int,而不是函数。为什么?

【问题讨论】:

【参考方案1】:

foo.Bar是正确的使用方式

property 将类方法转换为只读属性。

class Foo(object):

      def __init__(self):
        self._bar = 0

      @property
      def Bar(self):
        return self._bar

      @Bar.setter
      def Bar(self, value):
        self._bar = value


foo = Foo()
print(foo.Bar)  # called Bar getter
foo.Bar = 10  # called Bar setter
print(foo.Bar)  # called Bar getter

【讨论】:

【参考方案2】:

这是一个属性!这意味着当您将其作为属性获取时,它是返回值,如果您希望它成为方法,则不要将其设为属性。

要使用属性,只需使用foo.Bar,它就会返回值。

【讨论】:

以上是关于调用类成员函数会产生 TypeError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c ++调用非默认构造函数作为成员[重复]

子类的实例化过程

成员对象和封闭类

对象的深拷贝和浅拷贝

浅析在类模版中构建成员函数时,使用memcpy产生的副作用

在其派生类C++的构造函数中调用基类的构造函数[重复]