类(class)是一种面向对象编程语言的构造,描述了所创建的对象共同的属性和方法。
一、类属性
- 类属性,又称静态属性
- 只有通过类才能修改
- 实例拥有类属性,但不能修改类属性
实例属性 - 实例属性,又称动态属性
- 通过实例创建
- 不同实例的实例属性不同
- 实例的__dict__显示当前实例的所有属性
self的作用 - 类中的方法,如无特殊规定,都是以self作为第一个参数
- self引用当前实例
二、类的方法
2.1 对比方法和函数
- 名称的命名,方法块的编写方式都一样
- 方法不能单独调用,需要通过实例/类调用
- 方法的第一个参数必须是self
2.2 类的方法
使用装饰器: @classmethod
类方法的第一个参数: cls,表示类本身
2.3 静态方法
- 使用装饰器: @staticmethod
- 静态方法不与实例绑定
三、继承
3.1 继承的含义
- 继承是对象的特性之一
- 继承是面向对象编程的一个重要概念
3.2 重写
class Eat():
def __init__(self,name):
self.name = name
def eat():
return "fish"
class b(Eat):
def __init__(self,name,age):
# 保留父类属性
super().__init__(name)
self.age = age
d = b("cym",26)
print(dir(d))
四、多态
Python天然具有多态
五、封装
使用__属性名的方法进行私有化封装
额外内容:
__repr__
:对解析器友好,__str__
:对用户友好。
from fractions import Fraction:对分数进行运算,可以自动约分
六、控制属性访问
- 优化内存:
__slots__
:类似于设置只读属性 - 与属性相关的特殊方法
__getattr__
:获取不存在的属性时拦截
__setattr__
:赋值不存在的属性时拦截,并增加这个属性
七、迭代器
hasattr(类型名称,方法名称):判断某个类是否拥有某个方法
# 判断list类是否可以迭代,返回True或False
print(hasattr(list,"__iter__"))
迭代器特有方法__next__
,将迭代器里的内容逐一读到内存
ls = [1,2,3,4]
iter_ls = iter(ls)
print(iter_ls.__next__())
print(iter_ls.__next__())
print(iter_ls.__next__())
print(iter_ls.__next__())
# 如果继续向下读会抛异常,而for循环可以帮助处理异常
# print(iter_ls.__next__())
# for i in iter_ls:
# print(i)
>>>
1
2
3
4
八、生成器
介绍一个生成器的工具
import itertools
# 无限生成,用多少读多少
number = itertools.count(start=7)
print(next(number))
定义一个生成器对象:
def g():
# 返回当前值,并挂起。下次再调用时从这里开始
yield 0
yield 1
g1 = g()
print(next(g1))
生成器解析:
列表解析外层的[]换成()