day15

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相关

略...

你可能感兴趣的:(day15)