<!DOCTYPE html>
私有屬性
html
class Dog():
def init(self):
self.heart=100
d=Dog()
d.heart #訪問不到,heart屬於私有
在變量前加兩個下劃線,變量變爲私有屬性,外部不能訪問,內部能夠訪問
def getheart():
return self.heart#提供對外的私有屬性的訪問方法
對私有屬性的強制訪問
d.Dogheart
python
靜態方法
名義上歸類管理,實際上在靜態方法裏訪問不了類或實例中的任何屬性
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('汪汪') git
d=Dog("汪汪")
d.talk() github
str web
在類裏寫
def str(self): return "<obj:%s>"%self.name d直接打印對象就輸出str裏的內容 canvas
new metaclass 類也是對象,type爲類的類
class Dog(): pass type(Dog) 會知道類的類爲type new方法在init構造函數方法前執行 new裏面調用init
def new(cls,args,*kwargs): print('Foo --new--') return object.new(cls) 當return被註釋時,init不會被調用,這句繼承父類的new方法 metaclass原類 ruby
class MyType(): def init(self): print("mytype init") 1 pass def call(self): print("mytype call") 2 class Dog(): metaclass=MyType def init(self): print("dog init") 4 pass def new(self): print("dog new") 3
call建立new new建立init markdown
反射
getattr setattr hasattr delattr class Foo(object):app
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')