总论:
- 是什么:
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。不能被直接操作,只有被实例化为对象时,才会变得可操作。类的实例称为对象;
属性:就是属于一个对象的数据或者函数,我们可以通过句点(.)来访问属性;
类实例:用类创建对象称为实例化;
类中函数称方法;
方法重载:是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。方法重载是让类以统一的方式处理不同类型数据的一种手段;
方法重写、方法覆盖:类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写;
init_():称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法; - 能干什么:
主要是为了实现高效的编写;
可以编写表示现实事物和场景的类,并基于类创建实例;
类提供了一种组合数据和功能的方法; - 实现语法:
关键词class;
init()的形参self必不可少,当调用时self自动传入(self代表类的实例,不需要实例传入),并与类相关的方法调用都自动传递self; - 约定:
python约定类的创建名称首字母大写
class Cat(): #名称约定(非必须)首字母大写,括号中为父类(默认为object,后面会涉及)无可省去括号
def __init__(self, name, age):
#此处一般为文档字符串
self.name = name #初始化属性
self.age = age
def call(self):
print(self.name + " saying miao")
A_Cat =Cat("Black", 18) #实例化
A_Cat.call() #调用实例方法
定义方法即实现
序号 | 特殊方法/说明 | 调用 |
---|---|---|
1 | _dict_/类的属性(包含一个字典,存储所有实例成员信息) | 如print(Cat._dict_) |
2 | _doc_ /打印类的描述信息,第一个没有赋值的字符串就是说明文档,一般在class的第二行写 | 以下类似 |
3 | _module_/表示当前操作的对象在那个模块 | |
4 | _class_/表示当前操作的对象的类是什么 | |
5 | _del_/当对象在内存中被释放时,自动触发执行 | |
6 | _call__/对象后面加括号,触发执行 | |
7 | _dict_/查看类或对象中的所有成员 | |
8 | _getitem_/获取(自动触发) | |
9 | _setitem_/设置(自动触发) | |
10 | _delitem_/删除数据,del自动触发 |
-
属性操作:
getattr(obj, name[, default]) : 访问对象的属性。
hasattr(obj,name) : 检查是否存在一个属性。
setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
delattr(obj, name) : 删除属性。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * -
name
模块是对象,并且所有的模块都有一个内置属性 name。一个模块的 name 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, name 的值将是一个特别缺省"main"。
name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main,通过if判断这样就可以执行“mian:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“mian:”后面的内容。 -
私有变量
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。 -
私有方法:
在模块中用__funcname(两个下划线)定义的函数,可在dir(classname)不能用正常方式获取(只是用于说明此方法为私有方法),但可以用"实例._classname__funcname()调用方法。