面向对象简介
把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
- 类:创建对象的模版、对象的数据类型
- 对象:类的变量
- 属性:类中的变量,表示对象的属性、状态等信息
- 方法:类中的函数,表示对象所具有的动作、行为等
创建和使用类
基本语法
class <类名>():
# 定义成员变量/属性
# 定义成员方法/方法
定义属性
在类中的属性分为实例属性和类属性,一般来说实例属性是每个实例都有的且属性的值一般不同,每个实例的类属性是相同的。
实例属性需要在创建实例的时候一并进行初始化,而类属性在创建类的时候进行初始化,在创建实例的时候不需要初始化。
class MyDate():
# 定义类属性
time_zone = "China"
# 定义实例属性
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
# 定义/更改类属性
MyDate.time_zone = "America"
# 创建实例
date1 = MyDate(2020, 12,12)
# 定义实例属性
date1.hour = 12
- 访问成员变量:类名.变量名/对象名.变量名
定义方法
class MyDate():
# 构造方法
def __init__(self, year, month, day):
self.year = year
self.month = int(month)
self.day = int(day)
# 成员方法
def get_year(self):
return self.year
def get_month(self):
return self.month
def get_day(self):
return self.day
def set_year(self, year):
self.year = year
def set_month(self, month):
self.month = month
def set_day(self,day):
self.day = day
- 定义成员方法时第一个参数为self,表示对当前对象的的引用
- 方法__init__() 是一个特殊方法,每当根据类创建新实例时,Python都会自动运行它
- 访问成员方法:对象名.方法名([参数列表])
设置访问控制权限
在Python中,类成员的访问权限可以通过属性(property)、方法(method)以及特殊的命名规则来控制。以下是一些常用的访问修饰符:
public
:在Python中,默认所有的类成员都是公开的,可以直接通过对象进行访问protected
:在Python中没有专门的protected
关键字,但是可以通过命名约定来表示受保护的成员。按照惯例,可以给方法和属性名称前加上下划线_
前缀,这样的成员被称为受保护的。这类成员允许类本身及其子类访问,实际上可以被外部代码访问private
:同样在Python中,可以通过在方法和属性名称前加上双下划线__
前缀来定义私有成员。私有成员不能通过对象直接访问,只能通过类内部的方法进行访问和修改。
注意:如果在类外部定义或修改属性值,上述规则失效
继承
编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类 ,而新类称为子类 。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法、重写父类的方法。继承的语法如下:
class 类名(父类名):
pass
子类的构造方法__init__
在既有类的基础上编写新类时,通常要调用父类的init()方法 。这将初始化在父类init() 方法中定义的所有属性,从而让子类包含这些属性。
子类如果写了init()方法,就必须显式的调用父类的初始化;如果子类没有init方法,则默认使用父类的初始化。
子类可以使用super().父类方法来调用父类的方法实现部分功能。在python中super是一个特殊的类,super()就是使用super类创建出来的对象