python類總結
python 類的總結
私有屬性
class Dog():
def init(self):
self.heart=100
d=Dog()
d.heart #訪問不到,heart屬於私有
在變量前加兩個下劃線,變量變為私有屬性,外部不能訪問,內部可以訪問
def getheart(): return self.heart#提供對外的私有屬性的訪問方法
對私有屬性的強制訪問
d.Dogheart- 公有屬性(所有類共同擁有的屬性)class Dog() type=‘京巴‘ #創建公有屬性d=Dog()d2=Dog()Dog.type #這樣調用,是在所有類的對象的公有變量裏設置d.type#d,d2屬性相同 d2.type#當用對象調用的時候,會在自己對象的內存裏新建一個type變量
- 析構函數
d=Dog()del d#刪除對象名到內存空間的引用 - 繼承
靜態方法
名義上歸類管理,實際上在靜態方法裏訪問不了類或實例中的任何屬性
author = ‘Mr.Bool‘
class Dog(object):
def init(self,name):
self.name=name
@staticmethod
def eat():
print("%s like eat 骨頭"%self.name)
print(‘狗愛吃骨頭‘)
@staticmethod
def eat(self):
print("%s like eat 骨頭"%self.name)
# print(‘狗愛吃骨頭‘)
def talk(self):
self.eat(self)
print(‘汪汪‘)d=Dog("汪汪")
d.talk()- 類方法@classmethod類方法只能訪問類變量。不能訪問實例變量。幾乎很少用
- 屬性方法@property
把一個方法變成一個靜態屬性,不用括號調用。class Dog(): def init(self): pass @property def eat(self): print(‘狗愛吃骨頭‘) @property def eat(self,name): print(‘狗愛吃%s‘%self.name) @eat.setter def eat(self,foot): print(‘set to foot:%s‘%foot) d=Dog() d.eat 調用屬性方法 d.eat=‘包子‘ 當屬性方法需要傳參數,就要重寫一個方法,方法名與屬性方法名相同 d.Eat=‘包子‘ 大寫也可以 當刪除屬性方法時用 @eat.delete def eat(self): del self.__food print(‘刪完了‘) - 類的描述信息
class Dog(): ‘‘‘這個類是描述狗的‘‘‘print(Dog.doc)輸出 這個類是描述狗的 - module 和 classmodule輸出 這個類是從哪個模塊裏class輸出類
- call對象後面加括號執行calld=Dog()d() 將調用Dog裏的call方法
- dict查看對象中的所有成員變量和方法,使用實例調用只打印實例內的屬性,不包括類屬性
str
在類裏寫
def str(self): return "<obj:%s>"%self.named直接打印對象就輸出str裏的內容- getitem,setitem,delitem,把類變成字典
class Foo(object): def init(self): self.data={} pass def getitem(self,key): print(‘getitem‘,key) return self.data.get(key) pass def setitem(self,key,value): print(‘setitem‘,key) self.data[key]=value pass def delitem(self,key): print(‘delitem‘,key) pass obj=Foo() obj[‘name‘]=‘alex‘#自動觸發執行 getitem print(obj[‘name‘] #自動觸發執行 setitem del obj[‘k1‘] #自動觸發執行delitem new metaclass類也是對象,type為類的類
class Dog(): passtype(Dog) 會知道類的類為typenew方法在init構造函數方法前執行new裏面調用init
def new(cls,args,*kwargs):print(‘Foo --new--‘)return object.new(cls) 當return被註釋時,init不會被調用,這句繼承父類的new方法metaclass原類class MyType(): def init(self): print("mytype init") 1 pass def call(self): print("mytype call") 2class Dog(): metaclass=MyType def init(self): print("dog init") 4 pass def new(self): print("dog new") 3
call創建new new創建init反射
getattr setattr hasattr delattrclass Foo(object):def __init__(self):
self.name = ‘wj‘
def func(self):
return ‘func‘obj = Foo()
檢查是否含有成員 ####hasattr(obj, ‘name‘)hasattr(obj, ‘func‘)
獲取成員 ####getattr(obj, ‘name‘)getattr(obj, ‘func‘)
設置成員 ####setattr(obj, ‘age‘, 18)setattr(obj, ‘show‘, lambda num: num + 1)
刪除成員 ####delattr(obj, ‘name‘)delattr(obj, ‘func‘)
python類總結