【问题标题】:Python Object not callable [duplicate]Python对象不可调用[重复]
【发布时间】:2017-01-25 21:14:33
【问题描述】:

我是 python 新手:

创建了一个类:

class NodeStruct:
"""Struct to hold node data for search trees"""

  def __init__(self, name, children, parent_name, edge_weight):
      self.name = name
      self.childNodes = children
      self.parent = parent_name
      self.weight = edge_weight

  def name(self):
      return self.name

  def parent(self):
      return self.parent

  def path_cost(self):
      return self.weight

  def children(self):
      return self.childNodes

  def child_keys(self):
      return self.childNodes.keys()

实例化:

this_node = NodeStruct(start, problem[start], 'root', 0)

问题:当我调用 name() 时

name = this_node.name()

我收到以下错误:

TypeError: 'str' object is not callable

看起来应该是直截了当的......我错过了什么?

【问题讨论】:

  • 你覆盖了构造函数self.name = name中的方法

标签: python class typeerror callable


【解决方案1】:

您希望this_node.name() 找到name中的哪一个?

      self.name = name
      # ...

  def name(self):
      return self.name

解决方法很可能将属性名改为self._name

      self._name = name
      # ...

  def name(self):
      return self._name

【讨论】:

    【解决方案2】:

    当你定义你的类时,name 是一个函数。但是,一旦实例化它,__init__ 就会被调用,并且name 会立即设置为您传入的任何内容(在本例中为字符串)。函数的名称不会与其他对象的名称分开。使用唯一的名称。

    【讨论】:

    • 你是第一个回答的,但来自@ev-br 的代码示例确实帮助我更多地理解它,但我会更上一层楼,因为我明白你在说什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多