【问题标题】:How to correctly display a method?如何正确显示方法?
【发布时间】:2015-04-20 02:49:33
【问题描述】:

我的程序是从列表中显示动物的名称和类型,然后随机选择一种感觉。我可以让前 2 个正确显示,但感觉显示为: > 的 bound method Animal.get_mood 并且我不知道为什么任何帮助都会很棒!

for item in animals:
    print(item.get_name(), "the", item.get_animal_type(), "is", item.get_mood())

def __init__(self,animal_type, name, mood = None):
    self.__mood = mood if mood else self.get_mood
def set_mood(self, mood):
    self.__mood = mood

def check_mood(self):
    integer = random.randint(1,3)
    if integer == 1:
        self.__mood = "happy"
    elif integer == 2:
        self.__mood = "hungry"
    elif integer == 3:
        self.__mood = "sleepy"
def get_mood(self):
    return self.__mood

【问题讨论】:

  • 你需要像这样调用get_mood mood if mood else self.get_mood() 注意()get_mood之后
  • 我刚刚这样做了,我收到了这么长的 Traceback(最近一次调用最后一次):generator/Animal.py",第 9 行,在 init self.__mood = mood if mood else self.get_mood() 第 40 行,在 get_mood return self.__mood AttributeError: 'Animal' object has no attribute '_Animal__mood'

标签: python list class python-3.x


【解决方案1】:

由于您的 get_mood() 方法返回 self.__mood,因此您不能使用它来初始化 self.__mood - 这样做是指一个尚不存在的变量。看起来您可能想在 init 中调用 check_mood() 。记住“()”表示您正在调用该方法,而不是像他们在 cmets 中指出的那样将 self.__mood 设置为等于该方法。

编辑:因为 check_mood() 实际上并没有返回任何内容,所以您需要将其分解为 if/else 语句,如下所示。或者,您可以让 check_mood() 返回新的心情。

固定的 init 函数应该是这样的:

def __init__(self,animal_type, name, mood = None):
    if mood:
        self.__mood = mood
    else:
        self.check_mood()

【讨论】:

  • 我刚刚得到 ___ ____ 是 None 现在有什么办法解决这个问题吗?
  • 发生在哪一行?或者更好的是,您可以发布您正在使用的完整代码吗?我无法从您这里的内容中复制该问题。
  • 示例输出:动物列表 ------------ Rex the dog is None 我认为这是由心情引起的 = None 但不知道如何去没有它跨度>
  • 哦,我想我看到了问题 - check_mood() 实际上并没有返回任何东西,所以将 self.__mood 设置为等于它的返回值将使 self.__mood 为 None。我编辑了我的答案来解决这个问题。
  • 如果这个答案解决了您的问题,请点击上面的复选标记考虑accepting it。 @特雷弗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2019-08-22
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多