類的內置方法
類的雙下劃線方法:
__len__
#-*- coding:utf-8 -*-
class Length(object):
def __init__(self):
print("xixi")
def __len__(self):
print("length is 180 cm")
return 1
l = Length()
len(l)
必須會的雙下線方法:
__Str__ & __repr__
Str函式或者print函式呼叫是 str
Repr 或者在終端中使用是使用的就是repr
如果沒有定義str,那么repr會出來代替輸出
這兩個方法回傳值必須是字串,否則拋出例外
class School(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def __repr__(self):
return 'repr'
def __str__(self):
return 'str'
s1 = School('xdd',22,'Man')
print(repr(s1))
print(str(s1))
print(s1)
__del__ 析構方法 和__init__恰恰相反,init為程式啟動時,執行,del為程式關閉時,執行.
class School(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def __del__(self):
print("process dead")
s = School('jack',22,'W')
print('aa')
print('vv')
NEW方法
__new__ 方法在 __init__ 方法之前執行
# -*- coding:utf-8 -*-
class Printer(object):
tasks = [] # 存盤列印任務的串列
instance = None
def __init__(self,name):
self.name = name
def add_task(self,job):
self.tasks.append(job)
print("[%s]添加了[%s]到hp列印機,目前任務數量[%s]"%(self.name,job,len(self.tasks)))
def __new__(cls, *args, **kwargs):
#只有第一次實體化的時候進行,后邊的實體化不會再次創建一個新實體
if cls.instance is None:# 進行正常的實體化,并把實體化后的物件,存在cls,instance里
obj = object.__new__(cls)#實體化程序
print("obj",obj)
cls.instance = obj #把實體化好的物件存下來
return cls.instance #以后的每次實體化都會回傳第一次存在的實體物件
p1 = Printer("word")
p2 = Printer("pdf")
p3 = Printer("execl")
p1.add_task("word data")
p2.add_task("pdf data")
p3.add_task("execl data")
Call方法:__call__ 物件后邊加括號觸發執行
加上了call方法后
S = School()
S() 這樣才會執行
或者使用 School()() 才能執行
例子:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
單看 p('Tim') 你無法確定 p 是一個函式還是一個類實體,所以,在Python中,函式也是物件,物件和函式的區別并不顯著,
Type動態生成一個類
# -*- coding:utf-8 -*-
class Person(object):
def __init__(self, name):
self.name = name
p = Person('Alex')
print(type(p))
print(type(Person))
def __init__(self,name,age):
self.name = name
self.age = age
Class_D = type("Person_Bak",(object,),{'sex':'W',"__init__":__init__}) #通過type動態產生一個類
print(Class_D)
d = Class_D('jack',22)
print(d.sex,d.age,d.name)
print(Class_D)
Isinstance(obj,cls)
檢查obj是否是類cls的物件
class Foo(object):
Pass
obj = Foo()
isinstance(obj,Foo)
Issubclass(sub,super)
檢查sub類是否是super類的派生類
class Foo(object):
pass
class Bar(object):
pass
issubclass(Bar,Foo)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103804.html
標籤:Python
