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))
#----------------------------------------------------------------------------------

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