【python】面向对象

简介: 1.简单写个例子,因为之前基本没写过python OOP。先写个父类 class Animal: # 构造方法 def __init__(self, name): self.

1.简单写个例子,因为之前基本没写过python OOP。先写个父类

class Animal:

    # 构造方法
    def __init__(self, name):
        self.name = name

    # 公有方法
    def run(self):
        print(self.name, "is running")

    def sing(self, song):
        print(self.name, "is singing:", song)

    def eat(self, food):
        print(self.name, "is eating", food)

测试代码

if __name__ == '__main__':
   
    panda = Animal("Panda")
    dog = Animal("dog")
    cat = Animal("cat")

    panda.run()
    panda.eat("pork")
    panda.sing("I love bamboo")

    dog.run()
    dog.eat("bone")
    dog.sing("I am a happy dog")

    cat.run()
    cat.eat("bamboo")
    cat.sing("I believe I am a tiger")

输出

Panda is running
Panda is eating pork
Panda is singing: I love bamboo
dog is running
dog is eating bone
dog is singing: I am a happy dog
cat is running
cat is eating bamboo
cat is singing: I believe I am a tiger

这个测试结果我们发现,不管给什么,它都吃。于是我们希望不同的动物对同一个动作 (方法)有不同的表现形式(实现)

写子类

class Panda(Animal):
    foods = ("bamboo",)

    def __init__(self):
        super(Panda, self).__init__("Panda")  # 调用父类构造方法

    def eat(self, food):      # 重写父类 eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)


class Dog(Animal):
    foods = ("pork", "bone", "mouse")

    def __init__(self):
        super(Dog, self).__init__("Dog")

    def eat(self, food):    # 重写父类eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)


class Cat(Animal):
    foods = ("mouse", "pork")

    def __init__(self):
        super(Cat, self).__init__("Cat")

    def eat(self, food):   # 重写父类eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)

    def sing(self, song):
        print(self.name, "is singing", "mia~ mia~ mia~")

测试代码

if __name__ == '__main__':
    panda = Panda()
    dog = Dog()
    cat = Cat()

    panda.run()
    panda.eat("pork")
    panda.sing("I love bamboo")

    dog.run()
    dog.eat("bone")
    dog.sing("I am a happy dog")

    cat.run()
    cat.eat("bamboo")
    cat.sing("I believe I am a tiger")

输出

Panda is running
Panda doesn't like pork
Panda is singing: I love bamboo
Dog is running
Dog is eating bone
Dog is singing: I am a happy dog
Cat is running
Cat doesn't like bamboo
Cat is singing mia~ mia~ mia~

 

最终代码

class Animal:

    # 构造方法
    def __init__(self, name):
        self.name = name

    # 公有方法
    def run(self):
        print(self.name, "is running")

    def sing(self, song):
        print(self.name, "is singing:", song)

    def eat(self, food):
        print(self.name, "is eating", food)


class Panda(Animal):
    foods = ("bamboo",)

    def __init__(self):
        super(Panda, self).__init__("Panda")  # 调用父类构造方法

    def eat(self, food):      # 重写父类 eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)


class Dog(Animal):
    foods = ("pork", "bone", "mouse")

    def __init__(self):
        super(Dog, self).__init__("Dog")

    def eat(self, food):    # 重写父类eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)


class Cat(Animal):
    foods = ("mouse", "pork")

    def __init__(self):
        super(Cat, self).__init__("Cat")

    def eat(self, food):   # 重写父类eat方法
        if food in self.foods:
            super().eat(food)
        else:
            print(self.name, "doesn't like", food)

    def sing(self, song):
        print(self.name, "is singing", "mia~ mia~ mia~")


if __name__ == '__main__':
    panda = Panda()
    dog = Dog()
    cat = Cat()

    # panda = Animal("Panda")
    # dog = Animal("dog")
    # cat = Animal("cat")

    panda.run()
    panda.eat("pork")
    panda.sing("I love bamboo")

    dog.run()
    dog.eat("bone")
    dog.sing("I am a happy dog")

    cat.run()
    cat.eat("bamboo")
    cat.sing("I believe I am a tiger")

 

相关文章
|
1月前
|
Python
python-面向对象
python-面向对象
15 2
|
5月前
|
Python
74 python - 打飞机案例(显示控制玩具飞机-面向对象)
74 python - 打飞机案例(显示控制玩具飞机-面向对象)
32 0
|
1月前
|
Java 程序员 数据安全/隐私保护
Python教程第6章 | Python面向对象
Python面向对象概念、类的定义和调用、类方法、修改和增加类属性、类和对象、初始化函数、类的继承、类的多态、类的访问控制
44 0
|
1月前
|
Python
|
2月前
|
机器学习/深度学习 人工智能 IDE
Python是一种高级、解释型、交互式和面向对象的脚本语言
Python是一种高级、解释型、交互式和面向对象的脚本语言
25 2
|
3月前
|
Python
【Python30天速成计划】6. 面向对象的继承和多态
【Python30天速成计划】6. 面向对象的继承和多态
|
3月前
|
Python
python 面向对象之继承
python 面向对象之继承
|
3月前
|
Python
Python基础学习 -- 面向对象
Python基础学习 -- 面向对象
18 0
|
3月前
python-pathlib模块使用 --- 面向对象的文件系统路径
python-pathlib模块使用 --- 面向对象的文件系统路径
20 0
|
3月前
|
算法 Python 容器
Python之变量命名、运算符和面向对象
【1月更文挑战第1天】 1、注释 注释分为单行注释和多行注释两种,单行注释用#表示,多行注释用(三个双引号"“”“”")或‘(三个单引号’‘’‘’')表示。如下所示:
102 2
Python之变量命名、运算符和面向对象