开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2023.04.14广东
Output:
10000JohnDoe2在Python中创建一个空类classEmployee:passe1=Employee()print(e1)e1.name='JohnDoe'print(e1.name)Output:
<__main__.Employeeobjectat0x0000000002DA51D0>JohnDoe3在Python中使用Type创建类e1=type('Employee',(),{})()print(e1)e1.name='JohnDoe'print(e1.name)Output:
<__main__.Employeeobjectat0x0000000002DCC780>JohnDoe4在Python中创建和调用类的方法classEmployee:salary=10000name='JohnDoe'deftax(self):print(self.salary*0.10)emp1=Employee()print(emp1.salary)print(emp1.name)emp1.tax()Output:
10000JohnDoe1000.05使用init()方法为数据属性赋值classEmployee:def__init__(self,salary,name):self.salary=salaryself.name=nameemp1=Employee(10000,'JohnDoe')print(emp1.salary)print(emp1.name)Output:
10000JohnDoe6在Python中更新对象属性classEmployee:def__init__(self,salary,name):self.salary=salaryself.name=nameemp1=Employee(10000,'JohnDoe')print(emp1.salary)emp1.salary=20000print(emp1.salary)Output:
10000200007在Python中删除对象属性和对象classEmployee:def__init__(self,salary,name):self.salary=salaryself.name=nameemp1=Employee(10000,'JohnDoe')delemp1.salary#Deleteobjectpropertydelemp1#DeleteobjectOutput:
哈哈8在Python中检查和比较对象的类型classTest(object):passprint(type(Test))obj1=Test()print(type(obj1))obj2=Test()print(type(obj1)istype(obj2))Output:
252510在Python中迭代对象属性classA():m=1n=2def__int__(self,x=1,y=2,z=3):self.x=xself._y=yself.__z__=zdefxyz(self):print(x,y,z)obj=A()print(dir(obj))print([aforaindir(obj)ifnota.startswith('__')])Output:
['__class__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__int__','__le__','__lt__','__module__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__','m','n','xyz']['m','n','xyz']11在Python中打印对象的所有属性classAnimal(object):def__init__(self):self.eyes=2self.name='Dog'self.color='Spotted'self.legs=4self.age=10self.kids=0animal=Animal()animal.tail=1temp=vars(animal)foritemintemp:print(item,':',temp[item])Output:
kids:0eyes:2name:Dogcolor:Spottedtail:1legs:4age:1012在python中在运行时创建类的数据属性classEmployee:passemp1=Employee()setattr(emp1,'Salary',12000)emp2=Employee()setattr(emp2,'Age',25)print(emp1.Salary)print(emp2.Age)Output:
120002513在函数中将对象的实例作为参数传递classVehicle:def__init__(self):self.trucks=[]defadd_truck(self,truck):self.trucks.append(truck)classTruck:def__init__(self,color):self.color=colordef__repr__(self):return'{}'.format(self.color)defmain():v=Vehicle()fortin'RedBlueBlack'.split():t=Truck(t)v.add_truck(t)print(v.trucks)if__name__=='__main__':main()Output:
[Red,Blue,Black]14在Python中创建和使用自定义Self参数classEmployee:def__init__(person,salary,name):person.salary=salaryperson.name=namedefprint_details(emp):print(str(emp.salary)+':'+emp.name)emp1=Employee(10000,'JohnDoe')emp1.print_details()Output:
10000:JohnDoe15使用self参数来维护对象的状态classState(object):def__init__(self):self.field=5.0defadd(self,x):self.field+=xdefmul(self,x):self.field*=xdefdiv(self,x):self.field/=xdefsub(self,x):self.field-=xs=State()print(s.field)s.add(2)#Selfisimplicitlypassed.print(s.field)s.mul(2)#Selfisimplicitlypassed.print(s.field)s.div(2)#Selfisimplicitlypassed.print(s.field)s.sub(2)#Selfisimplicitlypassed.print(s.field)Output:
5.07.014.07.05.016在Python中创建和使用静态类变量classEmployee:age=25print(Employee.age)e=Employee()print(e.age)e.age=30print(Employee.age)#25print(e.age)#30Output:
2525253017在Python中的一个函数上使用多个装饰器defmy_decorator(func):defwrapper():print('Step-1')func()print('Step-3')returnwrapperdefrepeat(func):defwrapper():func()func()func()returnwrapper@my_decorator@repeatdefstart_steps():print('Step-2')start_steps()Output:
Step-1Step-2Step-2Step-2Step-318在Python中的方法中同时访问cls和selfclassMyClass:__var2='var2'var3='var3'def__init__(self):self.__var1='var1'defnormal_method(self):print(self.__var1)@classmethoddefclass_method(cls):print(cls.__var2)defmy_method(self):print(self.__var1)print(self.__var2)print(self.__class__.__var2)if__name__=='__main__':print(MyClass.__dict__['var3'])clzz=MyClass()clzz.my_method()Output:
var3var1var2var219从装饰器访问实例方法的类classDecorator(object):def__init__(self,decoratee_enclosing_class):self.decoratee_enclosing_class=decoratee_enclosing_classdef__call__(self,original_func):defnew_function(*args,**kwargs):print('decoratingfunctionin',self.decoratee_enclosing_class)original_func(*args,**kwargs)returnnew_functionclassBar(object):@Decorator('Bar')deffoo(self):print('infoo')classBaz(object):@Decorator('Baz')deffoo(self):print('infoo')print('beforeinstantiatingBar()')b=Bar()print('callingb.foo()')b.foo()Output:
beforeinstantiatingBar()callingb.foo()decoratingfunctioninBarinfoo20使用给定的装饰器获取Python类的所有方法importinspectdefdeco(func):returnfuncdefdeco2():defwrapper(func):passreturnwrapperclassTest(object):@decodefmethod(self):pass@deco2()defmethod2(self):passdefmethodsWithDecorator(cls,decoratorName):sourcelines=inspect.getsourcelines(cls)[0]fori,lineinenumerate(sourcelines):line=line.strip()ifline.split('(')[0].strip()=='@'+decoratorName:#leavingabitoutnextLine=sourcelines[i+1]name=nextLine.split('def')[1].split('(')[0].strip()yield(name)print(list(methodsWithDecorator(Test,'deco')))print(list(methodsWithDecorator(Test,'deco2')))Output:
['method']['method2']21装饰一个classfromfunctoolsimportwrapsdefdec(msg='default'):defdecorator(klass):old_foo=klass.foo@wraps(klass.foo)defdecorated_foo(self,*args,**kwargs):print('@decoratorpre%s'%msg)old_foo(self,*args,**kwargs)print('@decoratorpost%s'%msg)klass.foo=decorated_fooreturnklassreturndecorator@dec('foodecorator')classFoo(object):deffoo(self,*args,**kwargs):print('foo.foo()')@dec('subfoodecorator')classSubFoo(Foo):deffoo(self,*args,**kwargs):print('subfoo.foo()pre')super(SubFoo,self).foo(*args,**kwargs)print('subfoo.foo()post')@dec('subsubfoodecorator')classSubSubFoo(SubFoo):deffoo(self,*args,**kwargs):print('subsubfoo.foo()pre')super(SubSubFoo,self).foo(*args,**kwargs)print('subsubfoo.foo()post')SubSubFoo().foo()Output:
WelcomeMessage:'HelloWorld'...workisdone...23在Python中创建多个传入参数列表的类变量classEmployee(object):def__init__(self,**kwargs):forkeyinkwargs:setattr(self,key,kwargs[key])emp=Employee(age=25,name='JohnDoe')print(emp.age)print(emp.name)Output:
25JohnDoe24Python中的wraps装饰器fromfunctoolsimportwrapsdefdecorator_func_with_args(arg1,arg2):defdecorator(f):@wraps(f)defwrapper(*args,**kwargs):print('Beforeorginalfunctionwithdecoratorargs:',arg1,arg2)result=f(*args,**kwargs)print('Ranaftertheorginalfunction')returnresultreturnwrapperreturndecorator@decorator_func_with_args('test1','test2')defhello(name):'''Afunctionwhichprintsagreetingtothenameprovided.'''print('Hello',name)return25print('Startingscript..')x=hello('John')print('Thevalueofxis:',x)print('Thewrappedfunctionsdocstringis:',hello.__doc__)print('Thewrappedfunctionsnameis:',hello.__name__)Output:
Startingscript..Beforeorginalfunctionwithdecoratorargs:test1test2HelloJohnRanaftertheorginalfunctionThevalueofxis:25Thewrappedfunctionsdocstringis:Afunctionwhichprintsagreetingtothenameprovided.Thewrappedfunctionsnameis:hello25使用可选参数构建装饰器defd(arg):ifcallable(arg):#Assumesoptionalargumentisn't.defnewfn():print('mydefaultmessage')returnarg()returnnewfnelse:defd2(fn):defnewfn():print(arg)returnfn()returnnewfnreturnd2@d('Thisisworking')defhello():print('helloworld!')@d#Noexplicitargumentswillresultindefaultmessage.defhello2():print('hello2world!')@d('Applyingittwice')@d('Wouldalsowork')defhello3():print('hello3world!')hello()hello2()hello3()Output:
Thisisworkinghelloworld!mydefaultmessagehello2world!ApplyingittwiceWouldalsoworkhello3world!26在Python中将参数传递给装饰器defdecorator_maker_with_arguments(decorator_arg1,decorator_arg2,decorator_arg3):defdecorator(func):defwrapper(function_arg1,function_arg2,function_arg3):print('Thewrappercanaccessallthevariables\n''\t-fromthedecoratormaker:{0}{1}{2}\n''\t-fromthefunctioncall:{3}{4}{5}\n''andpassthemtothedecoratedfunction'.format(decorator_arg1,decorator_arg2,decorator_arg3,function_arg1,function_arg2,function_arg3))returnfunc(function_arg1,function_arg2,function_arg3)returnwrapperreturndecorator@decorator_maker_with_arguments('canada','us','brazil')defdecorated_function_with_arguments(function_arg1,function_arg2,function_arg3):print('Thisisthedecoratedfunctionanditonlyknowsaboutitsarguments:{0}''{1}''{2}'.format(function_arg1,function_arg2,function_arg3))decorated_function_with_arguments('france','germany','uk')Output:
Thewrappercanaccessallthevariables-fromthedecoratormaker:canadausbrazil-fromthefunctioncall:francegermanyukandpassthemtothedecoratedfunctionThisisthedecoratedfunctionanditonlyknowsaboutitsarguments:francegermanyuk27@property装饰器classCurrency:def__init__(self,dollars,cents):self.total_cents=dollars*100+cents@propertydefdollars(self):returnself.total_cents//100@dollars.setterdefdollars(self,new_dollars):self.total_cents=100*new_dollars+self.cents@propertydefcents(self):returnself.total_cents%100@cents.setterdefcents(self,new_cents):self.total_cents=100*self.dollars+new_centscurrency=Currency(10,20)print(currency.dollars,currency.cents,currency.total_cents)currency.dollars+=5print(currency.dollars,currency.cents,currency.total_cents)currency.cents+=15print(currency.dollars,currency.cents,currency.total_cents)Output:
10201020152015201535153528类和函数的装饰器fromfunctoolsimportwrapsdefdecorator(func):@wraps(func)defwrapper(*args,**kwargs):print('sthtolog:%s:%s'%(func.__name__,args))returnfunc(*args,**kwargs)returnwrapperclassClass_test(object):@decoratordefsum_func(self,a,b):print('classsum:%s'%(a+b))returna+bprint(Class_test.sum_func(1,5,16))Output:
sthtolog:sum_func:(1,5,16)classsum:212129Python中带参数和返回值的装饰器defcalculation(func):defwrapper(*args,**kwargs):print('Insidethecalculationfunction')num_sum=func(*args,**kwargs)print('Beforereturnfromcalculationfunction')returnnum_sumreturnwrapper@calculationdefaddition(a,b):print('Insidetheadditionfunction')returna+bprint('Sum=',addition(5,10))Output:
InsidethecalculationfunctionInsidetheadditionfunctionBeforereturnfromcalculationfunctionSum=1530Python使用参数wraps装饰器fromfunctoolsimportwrapsdefdecorator_func_with_args(arg1,arg2):defdecorator(f):@wraps(f)defwrapper(*args,**kwargs):print('Beforeorginalfunctionwithdecoratorargs:',arg1,arg2)result=f(*args,**kwargs)print('Ranaftertheorginalfunction')returnresultreturnwrapperreturndecorator@decorator_func_with_args('test1','test2')defhello(name):'''Afunctionwhichprintsagreetingtothenameprovided.'''print('Hello',name)return25print('Startingscript..')x=hello('John')print('Thevalueofxis:',x)print('Thewrappedfunctionsdocstringis:',hello.__doc__)print('Thewrappedfunctionsnameis:',hello.__name__)Output:
Startingscript..Beforeorginalfunctionwithdecoratorargs:test1test2HelloJohnRanaftertheorginalfunctionThevalueofxis:25Thewrappedfunctionsdocstringis:Afunctionwhichprintsagreetingtothenameprovided.Thewrappedfunctionsnameis:hello31Python装饰器获取类名defprint_name(*args):def_print_name(fn):defwrapper(*args,**kwargs):print('{}.{}'.format(fn.__module__,fn.__qualname__))returnfn(*args,**kwargs)returnwrapperreturn_print_nameclassA():@print_name()defa():print('HifromA.a')@print_name()defb():print('Hifromb')A.a()b()Output:
__main__.A.aHifromA.a__main__.bHifromb32简单装饰器示例defmy_decorator(func):defwrapper():print('Step-1')func()print('Step-3')returnwrapper@my_decoratordefstart_steps():print('Step-2')start_steps()Output:
Step-1Step-2Step-333在Python中使用print()打印类的实例classElement:def__init__(self,name,city,population):self.name=nameself.city=cityself.population=populationdef__str__(self):returnstr(self.__class__)+'\n'+'\n'.join(('{}={}'.format(item,self.__dict__[item])foriteminself.__dict__))elem=Element('canada','tokyo',321345)print(elem)Output:
name=canadacity=tokyopopulation=32134534在Python中的类中将装饰器定义为方法classmyclass:def__init__(self):self.cnt=0defcounter(self,function):'''thismethodcountsthenumberofruntimeofafunction'''defwrapper(**args):function(self,**args)self.cnt+=1print('Counterinsidewrapper:',self.cnt)returnwrapperglobalcounter_objectcounter_object=myclass()@counter_object.counterdefsomefunc(self):print('Somefunccalled')somefunc()print(counter_object.cnt)somefunc()print(counter_object.cnt)somefunc()print(counter_object.cnt)Output:
SomefunccalledCounterinsidewrapper:11SomefunccalledCounterinsidewrapper:22SomefunccalledCounterinsidewrapper:3335获取在Python中修饰的给定类的所有方法classawesome(object):def__init__(self,method):self._method=methoddef__call__(self,obj,*args,**kwargs):returnself._method(obj,*args,**kwargs)@classmethoddefmethods(cls,subject):defg():fornameindir(subject):method=getattr(subject,name)ifisinstance(method,awesome):yieldname,methodreturn{name:methodforname,methoding()}classRobot(object):@awesomedefthink(self):return0@awesomedefwalk(self):return0defirritate(self,other):return0print(awesome.methods(Robot))Output:
{'think':<__main__.awesomeobjectat0x00000213C052AAC0>,'walk':<__main__.awesomeobjectat0x00000213C0E33FA0>}36带参数和不带参数的Python装饰器defsomeDecorator(arg=None):defdecorator(func):defwrapper(*a,**ka):ifnotcallable(arg):print(arg)returnfunc(*a,**ka)else:return'xxxxx'returnwrapperifcallable(arg):returndecorator(arg)#return'wrapper'else:returndecorator#...or'decorator'@someDecorator(arg=1)defmy_func():print('my_func')@someDecoratordefmy_func1():print('my_func1')if__name__=='__main__':my_func()my_func1()Output:
1my_func37Python中带有self参数的类方法装饰器defcheck_authorization(f):defwrapper(*args):print('Insidewrapperfunctionargementpassed:',args[0].url)returnf(*args)returnwrapperclassClient(object):def__init__(self,url):self.url=url@check_authorizationdefget(self):print('Insidegetfunctionargementpassed:',self.url)Client('Canada').get()Output:
Insidewrapperfunctionargementpassed:CanadaInsidegetfunctionargementpassed:Canada38在Python中的另一个类中使用隐藏的装饰器classTestA(object):def_decorator(foo):defmagic(self):print('Startmagic')foo(self)print('Endmagic')returnmagic@_decoratordefbar(self):print('Normalcall')_decorator=staticmethod(_decorator)classTestB(TestA):@TestA._decoratordefbar(self):print('Overridebarin')super(TestB,self).bar()print('Overridebarout')print('Normal:')test=TestA()test.bar()print('-'*10)print('Inherited:')b=TestB()b.bar()Output:
Normal:StartmagicNormalcallEndmagic----------Inherited:StartmagicOverridebarinStartmagicNormalcallEndmagicOverridebaroutEndmagic39装饰器内部的self对象importrandomdefonly_registered_users(func):defwrapper(handler):print('Checkingifuserisloggedin')ifrandom.randint(0,1):print('Userisloggedin.Callingtheoriginalfunction.')func(handler)else:print('UserisNOTloggedin.Redirecting...')returnwrapperclassMyHandler(object):@only_registered_usersdefget(self):print('Getfunctioncalled')m=MyHandler()m.get()Output:
CheckingifuserisloggedinUserisloggedin.Callingtheoriginalfunction.Getfunctioncalled40在Python中将多个装饰器应用于单个函数defmultiplication(func):defwrapper(*args,**kwargs):num_sum=func(*args,**kwargs)print('Insidethemultiplicationfunction',num_sum)returnnum_sum*num_sumreturnwrapperdefaddition(func):defwrapper(*args,**kwargs):num_sum=func(*args,**kwargs)print('Insidetheadditionfunction',num_sum)returnnum_sum+num_sumreturnwrapper@addition@multiplicationdefcalculation(a):print('Insidethecalculationfunction',a)returnaprint('Sum=',calculation(5))Output:
Insidethecalculationfunction5Insidethemultiplicationfunction5Insidetheadditionfunction25Sum=5041Python装饰器获取类实例classMySerial():def__init__(self):pass#Ihavetohavean__init__defwrite(self,*args):print(args[0])pass#writetobufferdefread(self):pass#readtobuffer@staticmethoddefdecorator(func):deffunc_wrap(cls,*args,**kwargs):cls.ser.write(func(cls,*args,**kwargs))returncls.ser.read()returnfunc_wrapclassApp():def__init__(self):self.ser=MySerial()@MySerial.decoratordefmyfunc(self):self=100return['canada','australia']App().myfunc()Output:
['canada','australia']42init和call有什么区别classCounter:def__init__(self):self._weights=[]foriinrange(0,2):self._weights.append(1)print(str(self._weights[-2])+'No.from__init__')def__call__(self,t):self._weights=[self._weights[-1],self._weights[-1]+self._weights[-1]]print(str(self._weights[-1])+'No.from__call__')num_count=Counter()foriinrange(0,4):num_count(i)Output:
1No.from__init__2No.from__call__4No.from__call__8No.from__call__16No.from__call__43在Python中使用new和initclassShape:def__new__(cls,sides,*args,**kwargs):ifsides==3:returnTriangle(*args,**kwargs)else:returnSquare(*args,**kwargs)classTriangle:def__init__(self,base,height):self.base=baseself.height=heightdefarea(self):return(self.base*self.height)/2classSquare:def__init__(self,length):self.length=lengthdefarea(self):returnself.length*self.lengtha=Shape(sides=3,base=2,height=12)b=Shape(sides=4,length=2)print(str(a.__class__))print(a.area())print(str(b.__class__))print(b.area())Output:
class'__main__.Triangle'12.0class'__main__.Square'444Python中的迭代重载方法classCounter:def__init__(self,low,high):self.current=lowself.high=highdef__iter__(self):returnselfdef__next__(self):ifself.current>self.high:raiseStopIterationelse:self.current+=1returnself.current-1fornuminCounter(5,15):print(num)Output:
56....1545在Python中使用迭代器反转字符串classReverse:def__init__(self,data):self.data=dataself.index=len(data)def__iter__(self):returnselfdef__next__(self):ifself.index==0:raiseStopIterationself.index=self.index-1returnself.data[self.index]test=Reverse('Python')forcharintest:print(char)Output:
nohtyP46Python中reversed魔术方法classCount:def__init__(self,start,end):self.start=startself.end=endself.current=Nonedef__iter__(self):self.current=self.startwhileself.current
012....21047Python中的getitem和setitemclassCounter(object):def__init__(self,floors):self._floors=[None]*floorsdef__setitem__(self,floor_number,data):self._floors[floor_number]=datadef__getitem__(self,floor_number):returnself._floors[floor_number]index=Counter(4)index[0]='ABCD'index[1]='EFGH'index[2]='IJKL'index[3]='MNOP'print(index[2])Output:
IJKL48在Python中使用getattr和setattr进行属性赋值classEmployee(object):def__init__(self,data):super().__setattr__('data',dict())self.data=datadef__getattr__(self,name):ifnameinself.data:returnself.data[name]else:return0def__setattr__(self,key,value):ifkeyinself.data:self.data[key]=valueelse:super().__setattr__(key,value)emp=Employee({'age':23,'name':'John'})print(emp.age)print(emp.name)print(emp.data)print(emp.salary)emp.salary=50000print(emp.salary)Output:
23John{'age':23,'name':'John'}05000049什么是del方法以及如何调用它classEmployee():def__init__(self,name='JohnDoe'):print('Hello'+name)self.name=namedefdeveloper(self):print(self.name)def__del__(self):print('GoodBye'+self.name)emp=Employee('Mark')print(emp)emp='Rocky'print(emp)Output:
HelloMark<__main__.Employeeobjectat0x00000000012498D0>GoodByeMarkRocky50创建类的私有成员classTest(object):__private_var=100public_var=200def__private_func(self):print('PrivateFunction')defpublic_func(self):print('PublicFunction')print(self.public_var)defcall_private(self):self.__private_func()print(self.__private_var)t=Test()print(t.call_private())print(t.public_func())Output:
PrivateFunction100NonePublicFunction200None51一个Python封装的例子classEncapsulation:__name=Nonedef__init__(self,name):self.__name=namedefget_name(self):returnself.__namepobj=Encapsulation('Rocky')print(pobj.get_name())Output:
Rocky52一个Python组合的例子classSalary:def__init__(self,pay):self.pay=paydefget_total(self):return(self.pay*12)classEmployee:def__init__(self,pay,bonus):self.pay=payself.bonus=bonusself.obj_salary=Salary(self.pay)defannual_salary(self):return'Total:'+str(self.obj_salary.get_total()+self.bonus)obj_emp=Employee(600,500)print(obj_emp.annual_salary())Output:
Total:770053一个Python聚合的例子classSalary:def__init__(self,pay):self.pay=paydefget_total(self):return(self.pay*12)classEmployee:def__init__(self,pay,bonus):self.pay=payself.bonus=bonusdefannual_salary(self):return'Total:'+str(self.pay.get_total()+self.bonus)obj_sal=Salary(600)obj_emp=Employee(obj_sal,500)print(obj_emp.annual_salary())Output:
ThisMacBookwasmanufacturedin2018,byAppleInc.MultitaskingsystemName:MacOSTheguitarconsistsof6strings,itismadeofTonewoodandcanplay12keys.55在Python中获取一个类的父类classA(object):passclassB(object):passclassC(A,B):passprint(C.__bases__)Output:
(
Humanclassconstructorthisisredefined__privatevariableVasyaPrivatemethodHumanclassconstructorMaleHumanclassconstructorFemale58Python中的抽象类fromabcimportABC,abstractmethodclassAbstractClass(ABC):def__init__(self,value):self.value=valuesuper().__init__()@abstractmethoddefeat(self):passclassParents(AbstractClass):defeat(self):return'Eatsolidfood'+str(self.value)+'timeseachday.'classBabies(AbstractClass):defeat(self):return'Milkonly'+str(self.value)+'timesormoreeachday.'food=3adult=Parents(food)print('Adult')print(adult.eat())infant=Babies(food)print('Infants')print(infant.eat())Output:
AdultEatsolidfood3timeseachday.InfantsMilkonly3timesormoreeachday.59创建一个抽象类来覆盖Python中的默认构造函数fromabcimportABCMeta,abstractmethodclassAbstractClass(object,metaclass=ABCMeta):@abstractmethoddef__init__(self,n):self.n=nclassEmployee(AbstractClass):def__init__(self,salary,name):self.salary=salaryself.name=nameemp1=Employee(10000,'JohnDoe')print(emp1.salary)print(emp1.name)Output:
10000JohnDoe60使一个抽象类继承另一个抽象类fromabcimportABC,abstractmethodclassA(ABC):def__init__(self,username):self.username=usernamesuper().__init__()@abstractmethoddefname(self):passclassB(A):@abstractmethoddefage(self):passclassC(B):defname(self):print(self.username)defage(self):returnc=C('Test1234')c.name()Output:
Test123461Python中的super是做什么的classA(object):def__init__(self,profession):print(profession)classB(A):def__init__(self):print('JohnDoe')super().__init__('Developer')b=B()Output:
JohnDoeDeveloper62super()如何在多重继承中与init()方法一起工作classF:def__init__(self):print('F%s'%super().__init__)super().__init__()classG:def__init__(self):print('G%s'%super().__init__)super().__init__()classH:def__init__(self):print('H%s'%super().__init__)super().__init__()classE(G,H):def__init__(self):print('E%s'%super().__init__)super().__init__()classD(E,F):def__init__(self):print('D%s'%super().__init__)super().__init__()classC(E,G):def__init__(self):print('C%s'%super().__init__)super().__init__()classB(C,H):def__init__(self):print('B%s'%super().__init__)super().__init__()classA(D,B,E):def__init__(self):print('A%s'%super().__init__)super().__init__()a=A()print(a)Output:
AboundmethodD.__init__of__main__.Aobjectat0x000000000369CFD0DboundmethodB.__init__of__main__.Aobjectat0x000000000369CFD0BboundmethodC.__init__of__main__.Aobjectat0x000000000369CFD0CboundmethodE.__init__of__main__.Aobjectat0x000000000369CFD0EboundmethodG.__init__of__main__.Aobjectat0x000000000369CFD0GboundmethodH.__init__of__main__.Aobjectat0x000000000369CFD0HboundmethodF.__init__of__main__.Aobjectat0x000000000369CFD0Fmethod-wrapper'__init__'ofAobjectat0x000000000369CFD0__main__.Aobjectat0x000000000369CFD063将super与类方法一起使用classA(object):@classmethoddefname(self,employee):print('EmployeeName:',employee)classB(A):@classmethoddefname(self,employee):super(B,self).name(employee)B.name('JohnDoe')Output:
EmployeeName:JohnDoe64mro是做什么的classA(object):defdothis(self):print('FromAclass')classB1(A):defdothis(self):print('FromB1class')passclassB2(object):defdothis(self):print('FromB2class')passclassB3(A):defdothis(self):print('FromB3class')#DiamondinheritanceclassD1(B1,B3):passclassD2(B1,B2):passd1_instance=D1()d1_instance.dothis()print(D1.__mro__)d2_instance=D2()d2_instance.dothis()print(D2.__mro__)Output:
TrueMySQL3306ORACLE330668@staticmethod和@classmethod有什么区别classEmployee:@classmethoddefclassmthd(*args):returnargs@staticmethoddefstaticmthd(*args):returnargsprint(Employee.classmthd())print(Employee.classmthd('test'))print(Employee.staticmthd())print(Employee.staticmthd('test'))Output:
(class'__main__.Employee',)(class'__main__.Employee','test')()('test',)69Python中的装饰器是什么defmessage(param1,param2):defwrapper(wrapped):classWrappedClass(wrapped):def__init__(self):self.param1=param1self.param2=param2super(WrappedClass,self).__init__()defget_message(self):return'message%s%s'%(self.param1,self.param2)returnWrappedClassreturnwrapper@message('param1','param2')classPizza(object):def__init__(self):passpizza_with_message=Pizza()print(pizza_with_message.get_message())