当前位置: 首页 > 后端技术 > Python

PythonOOP-5

时间:2023-03-25 21:16:30 Python

12.所用软件绘图软件:Faststonecapture13。抽象类抽象方法:没有具体实现内容的方法称为抽象方法。抽象方法的主要意义是规范子类的行为,接口抽象的使用需要借助abcmoduleimportabcabstractclass:包含抽象方法的类称为抽象类,通常作为ABC类使用。抽象类可以包含抽象方法或具体方法。抽象类可以有方法或属性。可以使用,继承的子类必须实现所有继承的抽象方法。假设子类没有实现所有继承的抽象方法,子类就不能实例化抽象类的main函数。有统一的规范14.自定义类其实就是一个类的定义,各种方法的自由组合。可以定义类和函数,然后通过类直接赋值。您可以使用MethodType来实现它。使用元类实现——MetaClass元类是用来创建其他类的类#变量的三种用法classA():def__init__(self):self.name="haha"self.age=18a=A()#三种属性用法#1.赋值#2.读取#3.删除a.name="ruochen"print(a.name)dela.name#print(a.name)ruochen#class属性property#applicationscenario:#对于变量除了普通的三个操作,如果想增加一些额外的操作,可以通过propertyclassA()来完成:def__init__(self):self.name="haha"self.age=18#这个函数是为类变量被读取时应该执行的函数functiondeffget(self):print("Ihavebeenread")returnself.name#模拟变量被写入时执行的函数deffset(self,name):print("我已经写好了,但是我可以做很多事情")self.name=name+"1"#fdel模拟删除变量时的操作deffdel(self):pass#property的四个参数顺序固定#第一个参数代表读时需要调用的函数#第二个参数代表写时需要调用的函数#第三个是deletename2=property(fget,fset,fdel,"Thisisanexampleofaproperty")a=A()print(a.name)print(a.name2)哈哈我是看哈哈#abstractclassAnimel():defsayHello(self):passclassDog(Animel):defsayHello(self):print("Asktheotherperson")classPerson(Animel):defsayHello(self):print("Kissme")d=Dog()d.sayHello()p=Person()p.sayHello()问对方Kissme#实现abstractclassimportabc#声明一个类并指定当前类的元类classHunam(metaclass=abc.ABCMeta):#定义一个抽象方法@abc.abstractmethoddefsmoking(self):pass#定义一个类抽象方法@abc.abstractclassmethoddefdrink():pass#定义一个静态抽象方法@abc.abstractstaticmethoddefplay():passdefsleep(self):print("Sleeping......")#函数名可以作为变量defsayHello(name):print("{}Hello".format(name))sayHello("A")liumang=sayHelloliumang("A")AhelloAhello#自己组装一个classclassA():passdefsay(self):print("Saying......")classB():defsay(self):print("Saying......")say(9)A.say=saya=A()a.say()b=B()b.say()说......说......说......#组装类例子2#自己组一个类fromtypesimportMethodTypeclassA():passdefsay(self):print("Saying......")a=A()a.say=MethodType(say,A)a.say()说......help(MethodType)Helponclassmethodinmodulebuiltins:classmethod(object)|方法(函数,实例)||创建绑定实例方法对象。||此处定义的方法:||__call__(self,/,*args,**kwargs)|调用self作为函数。||__delattr__(自我,姓名,/)|实施delattr(self,name)。||__eq__(自我,价值,/)|返回自我==价值。||__ge__(自我,价值,/)|返回自身>=值。||__get__(自我,实例,所有者,/)|返回实例的一个属性,类型为owner。||__getattribute__(自我,姓名,/)|返回getattr(self,name)。||__gt__(自我,价值,/)|返回自我>价值。||__hash__(自我,/)|返回散列(自身)。||__le__(自我,价值,/)|返回自身<=值。||__lt__(自我,价值,/)|返回自我<值。||__ne__(自我,价值,/)|返回自我!=值。||__reduce__(...)|泡菜的好帮手。||__repr__(自我,/)|返回代表(自己)。||__setattr__(自我,名称,价值,/)|实施setattr(self,name,value)。||----------------------------------------------------------------|此处定义的静态方法:||__new__(*args,**kwargs)来自builtins.type|创建并返回一个新对象。请参阅帮助(类型)以获得准确的签名。||----------------------------------------------------------------|此处定义的数据描述符:||__函数__|实现方法的函数(或其他可调用函数)||__自我__|吨方法绑定的实例type(8)int#使用type创建类#首先定义类应该有的成员函数defsay(self):print("Saying......")deftalk(self):print("Talking......")#使用类型创建类A=type("AName",(object,),{"class_say":say,"class_talk":talk})#然后就可以像往常一样使用classa=A()dir(a)a.class_say()说......#元类演示#元类的写法是固定的,他必须继承自类型#元类一般命名为MetaClassEndingclassCMetaClass(type):#注意下面的写法def__new__(cls,name,bases,attrs):#自己的业务处理print("Iamametaclass")attrs['id']='000000'attrs['addr']="1"returntype.__new__(cls,name,bases,attrs)#定义元类后,就可以使用了。请注意写法classTeacher(object,metaclass=CMetaClass):pass=Teacher()t.__dict__t.idiismetaclass'000000'