recode
1.内置属性
__dict__ ,
__class__: 获取对象的类
__name__: 获取类的名字
__doc__: 获取一个类的说明文档
__module__:获取一个类的模块名
__bases__:获取父类
魔法方法:
__slots__:限制类的属性,使用时会使__dict__失效,注意取舍
__str__
__repr__
2.属性私有划,属性保护(getter,setter)
getter - 获取对象的值之前希望做点什么时使用
@property
def 属性名去掉属性下划线(self)
内容
return 返回值
setter - 希望给属性赋值钱要做点别的事情时使用
@属性名去掉属性下划线setter
def 属性名去掉属性下划线(self,变量)
内容
带下划线的属性 = 值
33.继承
class 类(父类列表): - 最好继承只继承一个父类
类的内容
类中方法的调用过程:下那看当前类中是否有对应的方法,如果没有就去父类找,父类没有再父类,以此类推
如果找到object还没有找到,就报错
super的使用,在子类的对象方法和类方法中
4.抛出异常
raise 异常类型
重载运算符
1.什么是运算符重载
python中所有的类型都是类,所有的数据都是类的对象
python使用运算符的时候,实质会去调用这个运算符运算对应的魔法方法;
的对象时候支持相应的运算符,就看这个类有没有实现相应的魔法方法.
class Student:
def __init__(self, name, age=0, score=0):
self.name = name
self.age = age
self.score = score
def __repr__(self):
return str(self.__dict__)
# __add__是+的魔法方法,self代表+前面的数据,other代码+后面的数据,返回值是运算结果
def __add__(self, other):
if isinstance(other, int):
return self.score + other
return self.score + other.score
# *的魔法方法
def __mul__(self, other):
stus = []
for _ in range(other):
stus.append(copy.copy(self))
return stus
# >的魔法方法
# 注意大于和小于的魔法方法只需要实现就行了
def __gt__(self, other):
return self.score > other.score
stu2 = Student('小明', 18, 60)
stu1 = Student('小花', 19, 100)
stu3 = Student('小黄', 20, 80)
print(stu2 + 10)
print(stu2+stu1)
print(stu1*3)
print(stu1 > stu2)
stus = [stu2, stu1, stu3]
print(stus)
stus.sort()
print(stus)
内存管理机制
1.内存可以分为栈区间和堆区间,栈上的内存是系统自动开辟自动释放,堆上的内存需要手动开辟手动释放.
在python中堆上的内存空间会通过python提供的内存管理机制自动管理
2.内存管理机制
- 1).python中所有的变量都是保存在栈区间的,并且所有的变量保存的都是数据的地址;
所有的对象(数据)都是白村在堆区间的.
变量赋值的原理: 先在堆中开辟空间将数据存起来,然后在将地址返回给变量(通用)
如果数据是数字或者字符串,会先在内存中查看之前是否已经存储过这个输入
如果存储过直接返回之前的地址,没有存储过才会开辟空间存数据
- 2)内存的释放(垃圾回收机制)
python中的每一个对象都有一个默认的属性来保存这个对象的引用计数.
(看这个对象的地址被多少个变量或者数据存储,如果一个变量存了一个对象的地址,我们就说这个变量是这个对象的引用)
一个对象是否销毁,就看这个对象的引用计数是否为0,只要为0就会被销毁
getrefcount(对象) ->获取引用对象计数
from sys import getrefcount
# 1.变量赋值原理
list1 = [1, 2]
list2 = [1, 2]
print(id(list1), id(list2))
num1 = 'abc'
num2 = 'abc'
print(id(num1), id(num2))
# 2.引用计数
list3 = [1, 2, 3]
print(getrefcount(list3))
pygame相关
略...