recode
1.內(nèi)置屬性
__dict__ ,
__class__: 獲取對象的類
__name__: 獲取類的名字
__doc__: 獲取一個類的說明文檔
__module__:獲取一個類的模塊名
__bases__:獲取父類
魔法方法:
__slots__:限制類的屬性,使用時會使__dict__失效,注意取舍
__str__
__repr__
2.屬性私有劃,屬性保護(getter,setter)
getter - 獲取對象的值之前希望做點什么時使用
@property
def 屬性名去掉屬性下劃線(self)
內(nèi)容
return 返回值
setter - 希望給屬性賦值錢要做點別的事情時使用
@屬性名去掉屬性下劃線setter
def 屬性名去掉屬性下劃線(self,變量)
內(nèi)容
帶下劃線的屬性 = 值
33.繼承
class 類(父類列表): - 最好繼承只繼承一個父類
類的內(nèi)容
類中方法的調(diào)用過程:下那看當前類中是否有對應(yīng)的方法,如果沒有就去父類找,父類沒有再父類,以此類推
如果找到object還沒有找到,就報錯
super的使用,在子類的對象方法和類方法中
4.拋出異常
raise 異常類型
重載運算符
1.什么是運算符重載
python中所有的類型都是類,所有的數(shù)據(jù)都是類的對象
python使用運算符的時候,實質(zhì)會去調(diào)用這個運算符運算對應(yīng)的魔法方法;
的對象時候支持相應(yīng)的運算符,就看這個類有沒有實現(xiàn)相應(yīng)的魔法方法.
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代表+前面的數(shù)據(jù),other代碼+后面的數(shù)據(jù),返回值是運算結(jié)果
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
# >的魔法方法
# 注意大于和小于的魔法方法只需要實現(xiàn)就行了
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)
內(nèi)存管理機制
1.內(nèi)存可以分為棧區(qū)間和堆區(qū)間,棧上的內(nèi)存是系統(tǒng)自動開辟自動釋放,堆上的內(nèi)存需要手動開辟手動釋放.
在python中堆上的內(nèi)存空間會通過python提供的內(nèi)存管理機制自動管理
2.內(nèi)存管理機制
- 1).python中所有的變量都是保存在棧區(qū)間的,并且所有的變量保存的都是數(shù)據(jù)的地址;
所有的對象(數(shù)據(jù))都是白村在堆區(qū)間的.
變量賦值的原理: 先在堆中開辟空間將數(shù)據(jù)存起來,然后在將地址返回給變量(通用)
如果數(shù)據(jù)是數(shù)字或者字符串,會先在內(nèi)存中查看之前是否已經(jīng)存儲過這個輸入
如果存儲過直接返回之前的地址,沒有存儲過才會開辟空間存數(shù)據(jù)
- 2)內(nèi)存的釋放(垃圾回收機制)
python中的每一個對象都有一個默認的屬性來保存這個對象的引用計數(shù).
(看這個對象的地址被多少個變量或者數(shù)據(jù)存儲,如果一個變量存了一個對象的地址,我們就說這個變量是這個對象的引用)
一個對象是否銷毀,就看這個對象的引用計數(shù)是否為0,只要為0就會被銷毀
getrefcount(對象) ->獲取引用對象計數(shù)
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.引用計數(shù)
list3 = [1, 2, 3]
print(getrefcount(list3))
pygame相關(guān)
略...