xiaofan1228 发表于 2020-3-18 17:44:42

【前戏很长的弱鸡提问】print()不太懂了

本帖最后由 xiaofan1228 于 2020-3-19 10:18 编辑

在跟一个练习,可能前戏铺点过长。。。大概就是类的继承问题。

import random as r

class Animal():
    def __init__(self, age):
      self.age = age

    def get_age(self):
      return self.age

    def set_name(self, name):
      self.name = name

    def get_name(self):
      try:
            return self.name
      except:
            print("Set name first!")

    def __str__(self):
      return self.name + "age:" + str(self.age)

    __repr__ = __str__

class Cat(Animal):
    def speak(self):
      print("~meow~")
      
    def __str__(self):
      try:
            return self.name + " is a " + str(self.age) + "-years old cat!"
      except:
            return "A meow has no name yet!"
   
    __repr__ = __str__


class Human(Animal):
    def __init__(self, name, age):
      self.name = name
      self.age = age
      self.friends = []

    def get_friends(self):
      return self.friends

    def add_friends(self, other):
      if other.name not in self.friends:
            self.friends.append(other.name)
    def speak(self):
      print("Hello world! %s" %self.friends)

    def age_diff(self, other):
      diff = abs(self.age - other.age)
      print("They have",diff,"years difference.")

    def __str__(self):
      return "Human " + self.name + "age:" + str(self.age) + " have friends " + str(self.friends)

    __repr__ = __str__


class Student(Human):
    def __init__(self, name, age, major = None):
         self.name = name
         self.age = age
         self.major = major

    def change_major(self, major):
      self.major = major
      return self.major

    def speak(self):
      R = r.random()
      if R < 0.25:
            print("Zzzzz...")
      elif0.25 <= R < 0.5:
            print("I hunger...")
      elif 0.5 <= R < 0.75:
            print("Maybe I need to study...")
      else:
            print("Go jerk it out!!!")

    def __str__(self):
      return "Student : " + self.name + " age : " + str(self.age) + "==>Major : " + str(self.major)

    __repr__ = __str__


好的,我开始run了,此时输入
>>> a = Student("Jimmy",666, "PreMED")
>>> a
Student : Jimmy age : 666==>Major : PreMED
>>> print(a.get_name(), "say:", a.speak())
I hunger...
Jimmy say: None

问题在print()内,应该是调用了speak(),因为输出了speak的内容,但是为什么没有按照格式输出?而且还None了?
页: [1]
查看完整版本: 【前戏很长的弱鸡提问】print()不太懂了