Python 类、对象

归属于同一类,统称为类。例如:人类、鸟类、哺乳动物类等

属于同一类的特性:具有某些相同的共性。具有相同特征或者相同行为的群体  例如:人基本都有:眼睛、鼻子、嘴巴、耳朵等等

对象

什么是对象?object  又被称为实例 instance

object:东西 事物

对象是类当中的成员、个体。例如:人类的对象,包含:男人、女人;男人类里又包含:爸爸、爷爷、老公、儿子等等

类和对象在python的体现

定义类的关键字:Class

类的定义:

class  类名:

    类的组成部分

类的命名规则:大驼峰命名,即两个单词的首字母大写ExcelHandler、People

函数的命名:下划线命名,即两个单子之间是加下划线def  shuxing_01()

变量的命名:下划线命名,即两个单子之间是加下划线shuxing、username

如下图:

  类的调用:

 类、函数结合使用:

1、类方式的调用

2、对象的表示方式(输出的:<__main__.pepole object at 0x7fc7581945d0>  为:people类方法中的对象object)

 

 经典面试题:

a1、a2 两个变量均等于pepole类的对象    People()

但是实际输出的对象不同。所以,a1、a2 是不同的对象,且内存地址也不一样。

先有类,再生成一个一个对象,如下图:

 

 

类属性、实类属性的区别

属性:类和对象的特征

类属性:这个类的特征,这个群体的特征,所有的成员都一样。其他的类,可能不具备该特征。 例如:人类和鸟类的区别

实类属性:这个类中,这个个体的特征,类当中其他个体,可能不具备。  例如:人类中 男人、女人的区别

 

类属性的定义:可以先定义、可以后添加(类.新类属性=新类属性的值)

类属性的获取:类.属性

⚠️注意:

1、类属性可以被实类、对象访问

2、实类属性不可以被类获取

 

 

 输出实类属性  

print(geren.erduo)

 

 其他个体,调用该实类属性  (报错的原因:某个个体的属性,其他个体不具备)

print(man.erduo)

 

 

 类获取个体实类属性  (报错原因:实类属性不可以被类获取)

print(Pepole.erduo)

 

 

 个体获取类的属性

print(woman)
print(children)

 

 

 

实类属性

初始化:要通过定义的类,得到一个具体的对象。对象的个体,初始化过程保证自己的与众不同(例如:张三、李四 -- 长相、性格、身高不同)

设置先天属性的方法:(self: 在类里面,表示一个对象它自己,只能代表它一个

 def  _ _init_ _(self):

设置的实例属性方式:self.属性 = 参数

语法:

def _ _init_ _  (self,name):

   self.name  = name

⚠️注意:

1、在实例方法里面设置实例属性。就是对象的初始化过程,让每个对象的属性不太一样 

2、_ _init_ _  (self) 里面的参数跟实际调用时传入的参数要一一对应。(位置参数一一对应)

3、_ _init_ _  定义的形式参数  和  对象的实例化的实际参数,是一一对应的。

例如:

Woman类,初始化过程中,_ _init_ _  定义的形式参数,在对象调用的时候,Woman类,必须传入实例参数

Woman(22,"落落大方","本科",height=165)   传入的顺序必须和实际的位置参数一一对应。
然后再调用类里面的方法。

 _ _init_ _  (self) 总结:

   ♥必须return None(不写就是return None,写一个return,也会返回None。return 其他值会报错)

   ♥传入的参数必须设置为实例属性,才能被对象访问到(也就是 _ _init_ _  (self,name,age)  形式参数,必须要实例化,才可以被访问到,也就是需要定义 self.name = name  )

self 在类里面, 表示一个 **对象** 他自己。

 

 类属性和实例方法之间的运用:

 

 

 总结:

1、属性

先天具备的属性,不管是类属性,实例属性,都是在类名下面,__init__直接定义好。

 

方法

1、类方法,本质上其实就是函数

类方法和函数区别:

类方法:有self标识、放在类方法中、缩紧;类方法的调用:类名或对象名 :对象.方法()

函数:单个的函数,不需要加self,可以直接定义。函数的调用:函数前面要么不加,要么加导入的模块名称

 2、实例方法 (对象方法)

第一个参数名称规定是self

实例方法的调用:只能被实例/对象调用

实例方法在调用的时候,前缀是对象,不能是类

3、实例方法中定义个实例属性,调用的时候,不能直接调用这个属性,要先调用这个方法,在调用属性

 

 

 结果输出(实例方法中定义个实例属性,调用的时候,不能直接调用这个属性,要先调用这个方法,在调用属性)

 

 

 输出结果(实例方法在调用的时候,前缀是对象,不能是类

类直接调用实例方法

 

 

 对象调用实例方法

 

 

 

 类与装饰器结合使用

类方法:@classmethod 

在定义的类方法上面加上@classmethod ,@表示装饰器 decorator,将方法中的 self  改为 cls ;此时,类方法的调用:实例和类都可以调用。

 

 

 结果输出:

 

 

 cls 表示:  类 ,它自己,类方法可以 调用类属性(下面黄底代码)

cls:在  类  里面,表示一个  类  他自己。

 

 

 静态方法

@staticmethod 

静态方法,放在类里面的普通函数  不需要传固定的self

使用静态方法,为了方便管理代码(可以实现,类中含有类方法、其他函数) 

 类、对象都可以调用 静态方法即调用静态方法,只需要在静态方法前面加类名或对象名) 

 

 

 设置只读属性

@property

防止这个属性被被人篡改,设置为只读属性,比较安全。

被property装饰的方法,调用的时候,不需要加()

 

 

综上所述,总结如下:

1.实际使用过程中,实例方法占大多数情况(98%),工作中不知道该定义为 什么方法时,直接定义为实例方法。

2.静态方法:可以用普通函数替代,不是必须的(方便管理)

实例方法具体方式:

 输出结果:

 

类知识点总结

1.实例属性 和 类属性的区别

实例  可以获取 实例属性 和类属性

类  只能获取类属性

2.方法

实例方法  实例具备的,类不一定具备

类方法 类具备的,实例可以获取

静态方法  放在类里面的普通函数(对应函数上方,需要加装饰器@staticmethod

3._ _init_ _

是对象的初始化过程。通常在里面定义实例属性

实例属性的值通过参数传递进来(参数必须要赋值时实例属性  self.属性 = 参数)

4.类固定使用关键字

self 类定义的里面 对象 

cls  类里面  表示类 (对应实例方法上方,需要加装饰器@classmethod ,实例方法传关键字cls;此时,类和对象都可以对该方法进行调用

5.(重点)如果一个属性名,既是类属性 ,又是实例属性,实例优先访问实例属性

6.如果在一个具体的场景中,不知道是用类属性还是实例属性(答案:就用实例属性)

 

posted @ 2022-07-07 18:59  紫陌红尘雪落无声  阅读(247)  评论(0编辑  收藏  举报