目录
一、什么是类和对象
类,可以看成种类,类型,从一组对象中提取到的相似部分。所有的对象都属于一个类,称为类的实例。数据类型就是类。
对象(object)基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。
1 2 |
|
输出结果:
1 2 |
|
二、类
1、初始类
1 声明类 (和声明函数很相似)
1 2 3 4 |
|
2、创建一个类
1 2 |
|
*Python编程中习惯类名使用单数单词并且首字母大写
类是数据与函数的结合,二者称为类的属性
1 2 3 4 |
|
3、类的作用
3.1、属性引用(类名.属性)
(1)引用类的数据属性(类名.变量名)
1 |
|
输出结果为:
1 |
|
(2)引用类的函数属性(类名.函数名)
1 |
|
输出结果为:
1 |
|
(3)类的属性操作
1 2 |
|
输出结果为:
1 |
|
1 2 3 |
|
输出结果为:
1 |
|
1 2 |
|
输出结果为:
1 |
|
3.2、查看类的属性
dir(类名):查出的是一个名字列表
类名.__dict__:查出的是一个字典,key为属性名,value为属性值
3.3、特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)
3.4、实例化
(1)__init__实例化
类名加括号就是实例化,会自动触发__init__函数的运行,可以用他来为每个实例定制自己的特性
1 2 3 4 5 6 7 8 |
|
实例化:类名+括号
1 |
|
#就是在执行Garen.__int__(g1,’草丛伦’),然后执行__init__内的代码g1.nickname=’草丛伦’等
(2)self作用
self的作用是在实例化时自动将对象/实例本身传给__init__的第一个参数,self可以是任意名字,但是self是大家公认的。
4、抽象类
如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。
从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽象而来的。
从实现角度来看,抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似,但其实是不同的,即将揭晓答案
4.1、在python中实现实现抽象类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
5、抽象类与接口
抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计 。
6、类名称空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
而类的良好总属性:数据属性和函数属性
其中类的数据属性是共享给所有对象
1 2 |
|
输出结果为:
1 2 |
|
其中类的函数属性是绑定到所有对象
1 2 |
|
输出结果为:
1 2 |
|
分析:g1.attack就是在执行Garen.attack的功能,python的class机制会将Garen的函数属性attack绑定给g1,g 1相当于拿到了一个指针,指向Garen类的attack功能。除此之外,g1.attack()会将g1传给attack的第一个参数。
三、对象(实例)
对象是关于类而实际存在的一个例子,即实例
#类实例化得到g1这个实例
1 2 3 4 5 6 7 8 9 10 |
|
1、对象的属性引用和绑定方法
(1)对象(实例)只有一种作用:属性引用
格式: 实例名.类的变量名
实例名.绑定方法
实例名.实例自己的变量名
1 2 3 |
|
输出结果为:
1 2 3 |
|
(2)对象的属性操作
查看属性信息
1 |
|
输出结果:
1 |
|
修改属性信息
1 2 |
|
输出结果为:
1 |
添加属性
1 2 |
|
输出结果为:
1 |
|
删除属性:
1 2 |
|
输出结果为:
1 |
|
(3)查看实例属性
同样是dir和内置__dict__两种方式
特殊实例属性
__class__
__dict__
(4)对象(实例)的绑定方法
对象本身只有数据属性,但是python的class机制会将类的函数绑定到对象上,称为对象的方法,或者叫绑定方法。
1 2 |
|
输出结果为:
1 2 |
|
对象的绑定方法的特别之处在于:obj.func()会把obj传给func的第一个参数
2、对象的交互
仿照Garen类创建一个Riven类:
实例Riven类
交互:瑞雯攻击草丛伦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
输出结果为:
1 2 3 |
|
3、 对象(实例)名称空间
创建一个对象(实例)就会创建一个对象(实例)的名称空间,存放对象(实例)的名字,称为对象(实例)的属性
在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类中找不到就找父类。最后找不到就抛出异常。