Python面向对象
1、面向对象的概念
面向对象是一种编程思维,当前的开发思维主要有两类,一类是面向过程开发,以C语言为代表;另一类就是面向对象开发,Python、java等都是面向对象的代表。面向过程是以事物运行的过程为依据,将事物运行的过程通过计算机语言实现,从而实现计算机对现实世界的模拟运行;面向过程则是对事物运行过程中的每个参与者,将其抽象为一个具体的对象,从而实现程序模拟事务的运行。
2、面向对象的要素
2.1、对象
- 在Python中,一切皆对象。定义的类是类对象,类的实例是实例对象。
2.2、实例
- 类的具体实现,通过实例访问类的方法。
2.3、类
- 对现实事物的抽象,比如将人可以定义为一个类,男人也可以定义为一个类。
2.4、方法
- 事物的动态属性在程序中的抽象体现,比如吃饭、购物、唱歌等
- 类具有静态方法、实例方法和类方法
2.4.1、静态方法
静态方法通过实例对象和类对象都可以调用,定义时使用装饰器@staticmethod修饰。参数自定义,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法。
2.4.2、实例方法
只能通过实例对象调用,定义时第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法。
2.4.3、类方法
实例对象和类对象都可以调用类方法,定义时使用装饰器@classmethod修饰。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法。
# coding:utf-8
# Time:2022/6/28 20:57
# Author:Yang Xiaopeng
class person:
# 属性
city = "xian"
# 类方法
@classmethod
def eatting(cls):
print("吃饭", end="______eatting______")
print(cls.city)
# 静态方法
@staticmethod
def shopping():
print("购物", end="______shopping______")
print()
# 实例方法
def Sing(self):
print("唱歌", end="______Sing______")
print(self.city)
print(person.city, person.eatting()) # 通过类访问类属性及类方法 # 吃饭______eatting______xian 第二行:xian None
pr1 = person() # 创建类对象, pr1就是person的一个实例
pr1.eatting() # 通过实例访问类方法 # 吃饭______eatting______xian
pr1.shopping() # 通过实例访问类的静态方法 # 购物______shopping______
pr1.Sing() # 通过实例访问类的实例方法 # 唱歌______Sing______xian
print(pr1.city) # 通过实例访问类的属性 # xian
2.5、继承
一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。可以说,继承为了重用父类代码,同时为实现多态性做准备。
# coding:utf-8
# Time:2022/6/28 20:57
# Author:Yang Xiaopeng
class person:
# 属性
city = "xian"
# 类方法
@classmethod
def eatting(cls):
print("吃饭", end="______eatting______")
print(cls.city)
# 静态方法
@staticmethod
def shopping():
print("购物", end="______shopping______")
print()
# 实例方法
def Sing(self):
print("唱歌", end="______Sing______")
print(self.city)
class student(person):
def studying(self):
print("学习")
print(self.city) # 使用父类的类属性
print(self.eatting()) # 使用父类的类方法
xiaoming = student()
print(xiaoming.city) # 通过子类的实例对象访问父类的属性
xiaoming.eatting() # 通过子类的实例对象访问父类的类方法
xiaoming.Sing() # 通过子类的实例对象访问父类的实例方法
xiaoming.shopping() # 通过子类的实例对象访问父类的静态方法
xiaoming.studying() # 子类的实例对象访问子类的静态方法