Shout就是多態
類屬性:屬於類的成員,屬於對象共有的
類方法:在方法上添加@classmethod
@classmethod
Def cmethod(class): class是一個名字可以隨意寫
Print:(“這是一個類方法……”)
Test.cmethod()
可以通過類方法調用類的屬性
@classmethod
Def cmethod(class): class是一個名字可以隨意寫
Cls.uname=(hello)
Print:(“這是一個類方法……”)
Test.cmethod()
靜態方法:方法前加@staticmethod,靜態方法沒有參數,靜態方法即可和類沒有關係,也和對象沒有關係,也可以通過類和對象調用。
靜態方法都不需要參數,靜態方法比類級別高。
@classmethod
Def smethood():
Print(“這是一個靜態方法…….”)
工廠類:有一些子類,在一個類中生成很多對象簡單工廠模式。
Pass
__new_(cls): #用來創建對象而且必須有返回值
Return object_new_(cls)
/可以用print (ID(class))看地址
當有屬性時def _new_(sself.name)添加屬性
列:
單例:
對象的成員
簡單工廠
由工廠生成對象
#簡單工廠
class Hambuger:
def show(self):
print("這是漢堡...")
class chickenHambuger(Hambuger):
def show(self):
print("這是雞腿漢堡...")
class fishHambuger(Hambuger):
def show(self):
print("這是麥香魚漢堡...")
class factory:
@classmethod
def createHambegur(cls,hum):
if hum=="chicken":
return chickenHambuger()
else:
return fishHambuger()
c=factory.createHambegur("chicken")
c.show()
#------------------------------------------------------
#私有屬性、私有方法均不能在類外二被調用
class test:
#屬性
__privatcattor=0 #私有屬性
def __init__(self,name):
self.name=name
#方法
def show(self):
self.__privatcattor=1
print("這是show方法...%d,姓名: %s"%(self.__privatcattor,self.name))
t=test("張三")
t.show()
#---------------------------------------------
class pet:
def __init__(self,name):
self.name=name
def shout(self):
print("動物在叫.....")
class pethospital:#多態
def cure(self,pet):
print("{0}在看病....".format(pet.name))
pet.shout()
class dog(pet):
def shout(self):
print("%s汪汪叫....."%self.name)
class cat(pet):
def shout(self):
print("%s喵喵叫......."%self.name)
d=dog("泰迪")
d.shout()
c=cat("tom")
c.shout()
hospital=pethospital();
hospital.cure(d)
#---------------------------------
class test:
#類屬性
name=None
#初始化方法
def __init__(self,name):
self.name=name
#類方法
def show(self):
print(self.name)
t=test("abc")
t.show()
#--------------------------
class test:
#類屬性
uname="張三"
#初始化方法
def __init__(self,name):
test.uname=name
pass
#類方法
def show(self):
print(self.uname)
t=test("abc")
d=test("aaa")
print(t.uname)
#----------------------------------
#類方法
class test:
@classmethod
def cmethod(cls):
print("這是一個類方法")
test.cmethod()
#處理類級別的事情,可以通過類方法調用類屬性,也可以通過對象調用類屬性
#-----------------------------------------------------------------------------------------------------
class test:
@staticmethod
def smethod():
print("這是一個靜態方法....")
test.smethod()
#--------------------------------------------------------------------------------------
#新建對象方法
class test:
def __new__(cls,uname): #當有屬性是需要在__new__()中添加屬性
print(id(cls))#類就一個ID號
print("這是new方法.....")
return object.__new__(cls)
def __init__(self,uname):
self.uname=uname
print("初始化方法.....")
def __del__(self):
print("對象銷燬.....")
t=test("abc")
print(t.uname)
#-----------------------------------------------------------------------------
#單例
class singleton:
__instance=None
def __new__(cls, *args, **kwargs):
if cls.__instance==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
s=singleton()
ss=singleton()
print(id(s))
print(id(ss))
#----------------------------------------------------------------------------------