1.__str__和__repe__
classperson(object):
def__init__
(self,name,age):
self.name =name
self.age =age
def__str__
(self):
return
'stf:我叫{},今年{}歲
'.format(self.name,self.age)
def__repr__
(self):
return
'repr:我叫{},今年{}歲
str函式或者print函式呼叫時 = obj.__srt__()
repr函式或者互動式直譯器中呼叫時 = obj.__repr__()
這兩個方法的返回值必須是字串,否則會丟擲異常
classperson(object):
def__init__
(self,name,age):
self.name =name
self.age =age
#def __str__(self):
#return 'stf:我叫{},今年{}歲'.format(self.name,self.age)
def__repr__
(self):
return
'repr:我叫{},今年{}歲
如果__str__沒有被定義,那麼就會使用__repr__來代替輸出。
2.__del__析構方法
classperson(object):
def__init__
(self,name,age):
self.name =name
self.age =age
def__del__
(self):
print('
析構方法')
p = person('
wdc',22)
print('
11111111111')
print('
11111111111')
del p #
刪除物件p
當物件再記憶體中被釋放時,自動觸發執行。
3.__new__方法
classperson(object):
def__init__
(self,name,age):
self.name =name
self.age =age
(self.name)
def__new__(cls, *args, **kwargs):
#負責執行__init__,進行一些初始化前的工作
當有__new__方法時,不執行__init__方法,直接執行__new__方法,如果要想知道__init__方法,就要在__new__中返回:object.__new__(cls)
__new__方法實現單例模式:
classperson(object):
tasks =
instance =none
def__init__
(self,name):
self.name =name
defadd_task(self,job):
print('
{}新增任務{},共{}個任務
'.format(self.name,job,len(self.tasks)))
def__new__(cls, *args, **kwargs):
#只有第一次例項化的時候,正常精選,後面每次例項化,並不正在建立乙個新例項
if cls.instance ==none:
#進行正常的例項化,並把例項化後的物件,村再cls.instance中
obj = object.__new__(cls) #
例項化過程
cls.instance = obj #
把例項化好的物件存下來
return cls.instance #
以後的每次例項化,直接返回第一次村的例項物件
4.__call__方法
:在物件後加括號執行
:獲取物件的全部屬性
:用來找到物件所對應的類
class7.__slots__wdc(object):
defqqq():
print('
wdc+++++')
one =wdc()
print(one.__class__)
:限制物件的屬性名。
class person(object): # 基於person類的物件新增屬性只能新增下面列表中存在的字段
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...
Python 單下劃線和雙下劃線解析
單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...
Python中單下劃線和雙下劃線
python中存在一些特殊的方法,有些方法以雙下劃線 開頭和結尾,它們是python的魔法函式,比如 init 和 str 等等。不用要這種方式命名自己的變數或者函式。class a def init self,text self.text text def str self return self...