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