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