一、 面向对象编程概念

   在编程领域什么是对象? 举一个例子,女娲造人刚开始一个一个的捏人,很累而且容易出错。后来女娲制作了模具,泥土往模具里一倒一按压,标准的人出来了。模具产生的人就是“对象”而模具就是“类”。

      面向对象编程(OOP)是一种程序设计思想,其主要目的是为了提高程序的可维护性和可扩展性。

      面向对象编程有三大重要特征:

                  封装:

                       文具盒就是封装的体现,把笔、橡皮擦等装进去统一管理。代码层面,类class、函数fuc()等都是封装的体现。

 

                  继承:

                      儿子继承父亲的家业,儿子拥有父亲东西的使用权,父亲的就是儿子的,这个就是继承。 代码层面也是一样,儿子代码继承了父亲代码,儿子代码就能用父亲代码的功能。

 

                  多态:

                      父亲爱吃水果也有很多果园,他有三个儿子,都继承了父亲的吃水果爱好和果园,但各自有区别。

                      大儿子继承了苹果园爱吃苹果,二儿子继承了梨园爱吃梨子,三儿子继承了樱桃园爱吃樱桃。

                      那么什么是多态呢? 父亲和儿子们都有共同的爱好就是---吃水果。

                      大儿子调用吃水果方法-->输出是吃苹果,二儿子调用吃水果方法-->输出是吃梨子,三儿子调用吃水果-->输出是吃樱桃。这就是多态一种行为,多种状态。

                      为什么要有多态?? 

                            在面向对象的经典设计模式中,“开闭原则”是非常重要的一条。即系统中的类应该对扩展开放,而对修改关闭。这样的代码更可维护和可扩展,同时更加简洁与清晰。

                     

       一个对象由标识(Identity)、类(Class)、值(Value)三部分组成。

二、 类的定义和实例化对象

  类的定义:

class Person:  # 声明是类,定义类名称为创造人类
    def __init__(self, name, age, sex):  # 构造函数,初始化人的属性
     self.name = name
     self.sex = sex  
     self.age = age
        
    def creatBody(self):  # 创造人的身体方法
     print("身体已经生成")
        
    def creatName(self):  # 设置人姓名的方法 
     print('姓名已经设置,我的姓名是:%s'%( {self.name}) )
     
    def creatAge(self):  # 设置人的年龄方法
     print('年龄已经生成,我的年龄是岁%s'%( {self.age}) )
   
    def creatSex(self):  # 设置人的性别方法
     print('性别已经设置,我的性别是%s'%({self.sex}) )
     
    def greet(self):  # 宣告世界
     print("我的名字是: {}, 我的性别是: {}, 我的年龄是: {:.1f}".format(self.name, self.sex, self.age))

if __name__ == "__main__":
 person1 = Person("小丽",25,'')
 person1.greet()
 person2 = Person("木木",10,'')
 person2.greet()
 person3 = Person("小王",25,'')
 person3.greet()

 

三、 类的继承

class Father:
    def __init__(self, name, age):  # 构造函数,为对象设置name和age属性
        self.name = name
        self.age = age

    def greet(self):  # 方法
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

class Son(Father):
    def __init__(self, name, age,national):# 子类初始化
        Father.__init__(self, name, age) #调用父类初始化方法,初始化 name和age属性
        self.national = national         # 初始化子类扩展的national属性

    def nationality(self):# 子类扩展的自己的方法
        print(f"{self.name}'s nationality is {self.national}, with {self.age} years old.")

    def greet(self):  # 继承父类的方法后,子类重新修改了这个方法,让方法适合自己用。
        print(f"Hello, my name is {self.name} and I am {self.age} years old, my nationality is {self.national}.")
        
        
son1 = Son("Alice", 15, "China")
son1.nationality()
son1.greet()

 

四、多态

class Fruit:
    def eat(self):
        print("i am Fruit")
class Apple(Fruit):
    def eat(self):
        print("i love eat apple")
class Orange(Fruit):
    def eat(self):
        print("i love eat orange")
class Banana(Fruit):
    def eat(self):
        print("i love eat banana")

# 这个函数接收一个fruit参数,并调用它的kind方法
def show_kind(fruit):
    fruit.eat()

# 实例化调用
a = Apple()
b = Orange()
c = Banana()
show_kind(a) # i am apple
show_kind(b) # i am orange
show_kind(c) # i am banana