Python 多態 類屬性 靜態方法 簡單工廠

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 IDclass))看地址

 

當有屬性時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))
#----------------------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章