class Animal: def __init__(self, name, color, footNumber): self.name = name self.color = color self.footNumber = footNumber def showInfo(self): print(f"名称:{self.name},颜色:{self.color},脚的只数:{self.footNumber}") def move(self): print("可以通过飞、跑、游等方式移动身体") class Bird(Animal): def move(self): print("通过飞来移动身体") def nest(self): print("在树上筑巢") class Fish(Animal): def __init__(self, name, color, footNumber, length): super().__init__(name, color, footNumber) self.length = length def showInfo(self): super().showInfo() print(f"身长:{self.length}") def move(self): print("通过游来移动身体") #测试类bird = Bird("麻雀", "灰色", 2)bird.showInfo()bird.move()bird.nest()fish = Fish("金鱼", "红色", 0, "10cm")fish.showInfo()fish.move()animal = Animal("狗", "棕色", 4)animal.showInfo()animal.move()
时间: 2023-07-14 14:13:42 浏览: 204
这是一个 Python 中的面向对象编程例子,定义了一个基类 Animal 和两个派生类 Bird 和 Fish。其中 Animal 类有名称、颜色和脚的只数三个属性,以及 showInfo 和 move 两个方法;Bird 类继承自 Animal 类,并重写了 move 方法,增加了 nest 方法;Fish 类也继承自 Animal 类,并增加了身长属性,重写了 showInfo 和 move 方法。最后在程序中分别实例化了 Animal、Bird 和 Fish 类,并调用了它们的方法。
在运行程序时,会输出每个实例的详细信息并调用它们的 move 方法。可以看到,Bird 类的 move 方法是通过飞来移动身体,Fish 类的 move 方法是通过游来移动身体,而 Animal 类的 move 方法只是输出了一句话“可以通过飞、跑、游等方式移动身体”。这说明了在面向对象编程中,派生类可以重写基类的方法,实现不同的功能。
相关问题
用Javaclass Animal: def __init__(self): self.sound = "叽里咕噜" def make_sound(self): print(self.sound)class Cat(Animal): def __init__(self): super().__init__() self.sound = "喵喵"class Dog(Animal): def __init__(self): super().__init__() self.sound = "汪汪"class Duck(Animal): def __init__(self): super().__init__() self.sound = "嘎嘎"class Chicken(Animal): def __init__(self): super().__init__() self.sound = "咯咯"# 测试代码animal_name = input("请输入动物名:")if animal_name == "猫": cat = Cat() print("猫 : " + cat.sound)elif animal_name == "狗": dog = Dog() print("狗 : " + dog.sound)elif animal_name == "鸭": duck = Duck() print("鸭 : " + duck.sound)elif animal_name == "鸡": chicken = Chicken() print("鸡 : " + chicken.sound)else: animal = Animal() print(animal_name + " : " + animal.sound)
这段代码定义了一个Animal类和四个子类Cat、Dog、Duck和Chicken。Animal类有一个属性sound和一个方法make_sound,子类继承了Animal类并重写了sound属性。每个子类都有自己的声音,分别是喵喵、汪汪、嘎嘎和咯咯。当调用make_sound方法时,会输出对应子类的声音。
from objprint import op class Animal: def __init__(self,age): self.age = age class Person(Animal): def __init__(self, age,name): super().__init__(age) self.name =name class Male(Person): def __init__(self, age, name): super(Person,self).__init__(age) self.gender = "male" m = Male(32,"Peter") super(Male,m).__init__(18,"Nora") op(m)
这段代码有语法错误,需要进行修正。在最后一行代码中,op(m)的括号前面应该加上一个空格,即应该写成op(m)。同时,代码中缺少一个闭合的大括号,因此需要在代码的最后添加一个大括号。在修正这些问题之后,代码应该如下所示:
```python
from objprint import op
class Animal:
def __init__(self, age):
self.age = age
class Person(Animal):
def __init__(self, age, name):
super().__init__(age)
self.name = name
class Male(Person):
def __init__(self, age, name):
super().__init__(age, name)
self.gender = "male"
m = Male(32, "Peter")
super(Male, m).__init__(18, "Nora")
op(m)
```
值得注意的是,这段代码中的super()函数的使用存在一些问题。在Male类中,应该使用super().__init__(age, name)来调用父类Person的构造函数,而不是使用super(Person, self).__init__(age),因为这样会导致TypeError异常的产生。
阅读全文