23.Python之面向对象(类与对象)
Python之类与对象
-
类
-
类:用来描述具有相同的属性和方法的对象的集合(在Python中类与类型是一个概念)。
-
特点:
-
在程序中,必须先定义类(类名称通常首字母大写),再调用类,然后产生对象;
-
类(类体)中最常见的就是变量(类的数据属性或者叫做静态变量)与函数(函数属性或者叫做方法)的定义,但类中可以有任意Python代码,并且类体中的代码在类的定义阶段就会立即执行。在类中,如果一个变量的值需要被所有对象共享,那么这个变量应该被定义成静态变量,所有和静态变量相关的增、删、改、查都应该使用类名调用静态变量的方式来处理,而不应该使用对象名调用静态变量的方式进行处理。
-
类的属性可以进行增、删、改、查等操作
-
调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或者称为一个实例。
# For example: class Chinese(): # 类命名规则是首字母大写的驼峰体 ''' 类的注释信息 ''' country = 'China' # 类内通常定义相同的特征,country被称为Chinese类中的数据属性 def __init__(self,name,age,sex): # 在对象实例化的时候,__init__() 会自动触发执行 self.Name = name # Chinese.Name = name self.Age = age # Chinese.Age = age self.Sex = sex # Chinese.Sex = sex def run(self): # 类内通常定义相同的技能;类内的函数()中默认自带self参数;run(self)称之为Chinese类中的绑定方法 print(F'{self.Name} is running') obj = Chinese('HC', 18, 'males') # 类的实例化,Chinese.__init__(obj,'HC',18,'males')
-
-
类的实例化做了三件事:
- 先产生一个空对象;
- 自动触发类内部
__init__()
函数的执行。__init__
方法:- 该方法内可以有任意的python代码;
- 一定不能有返回值。
- 将空对象及调用类括号内的参数,一同传给
__init__()
,为对象定制独有的属性。在产生对象时,需要在类内定义一个__init__
的函数,该函数会在调用类的时候自动触发执行,为类中不同于那些相同特征与技能的对象进行初始化。
-
类内部定义的变量是给所有对象共享的,所有对象使用类中的属性都指向的都是同一个内存地址。
-
类内部定义的函数,类可以使用,但类用的时候就是普通函数,普通函数有几个参数就要传几个参数;而类内部定义的函数,其实是给对象使用的,当对象调用类内部的函数时,类内部的函数会绑定给对象,称之为绑定方法,绑定方法的特殊之处在于:谁来调用,就会将谁当作第一个参数
self
自动传入。
-
-
对象
-
类的实例化结果就是一个对象,对象中的变量只属于对象本身,每个对象都有属于自己的名称空间来存储对象的变量,当使用对象名去调用类中的属性时,会优先在自己的名称空间中寻找,再去类中寻找,如果类中没有引用其他类,找不到就会报错,即对象属性的查找顺序为:先找对象自己的名称空间(
__dict__
) -> 类的名称空间(__dict__
)。 -
对象的操作:
# 类属性的增、删、改、查 # 查 print(Chinese.country) # 增 Chinese.gender = 'males' print(Chinese.gender) # 改 Chinese.gender = 'females' print(Chinese.gender) # 删 del Chinese.gender
-
-
类与函数的区别
- 函数内的代码,在函数定义阶段并不会运行,只有在调用阶段才会运行;类体内的代码,在类定义阶段就会立刻执行,并且产生类的名称空间。
-
Python中一切皆对象
- 在Python3中统一了类与类型的概念,类即类型。
-
了解内容:新式类与经典类
-
新式类
- 继承object的类,以及该类的子类,都是新式类。
- 在Python 3中如果一个类没有指定继承的父类,默认就继承object,因此Python 3中所有的类都是新式类。
-
经典类
- 没有继承object的类,以及该类的子类,都是经典类。
- 只有在Python2中才区分新式类与经典类,Python3中都是新式类。
-
新式类和经典类只有在菱形继承下才有区别:
- 经典类:深度优先查找。
- 新式类:广度优先查找。
-