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

图形蟒蛇-面向对象编程

时间:2023-03-25 21:31:34 Python

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tuto...本文地址:http://www.showmeai.tech/article-detail/88免责声明:版权所有,转载请联系平台和作者并注明出处1.Python中的面向对象编程,英文称为ObjectOrientedProgramming,简称OOP,是一种编程思想。OOP把对象作为程序的基本单位,一个对象包含数据和操作数据的函数。Python是一种纯粹的面向对象的编程语言。在Python中,所有的数据类型都可以看作是对象。自定义对象数据类型是面向对象中类(Class)的概念。2、面向对象的概念类(Class):用来描述具有相同属性和方法的对象的集合。它定义集合中每个对象共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在实例化对象中是通用的。类变量在类内和函数体外定义。类变量一般不作为实例变量使用。数据成员:类变量或实例变量用于处理与类及其实例对象相关的数据。方法重写:如果从父类继承的方法不能满足子类的需要,可以重写。这个过程称为方法覆盖,也称为方法重写。局部变量:方法中定义的变量只适用于当前实例的类。实例变量:在类声明中,属性用变量表示,称为实例变量,实例变量是用self修饰的变量。继承:即派生类(derivedclass)继承了基类(baseclass)的字段和方法。继承还允许派生类的对象被视为基类的对象。比如有这样一种设计:从Animal类派生出一个Dog类型的对象,它模拟了“is-a”关系(比如Dog是Animal)。实例化:创建类的实例,类的具体对象。对象:由类定义的数据结构的实例。对象由两个数据成员(类变量和实例变量)和方法组成。与其他编程语言相比,Python的类机制非常简洁。Python中的类提供了面向对象编程的所有基本功能。类继承机制允许多个基类。派生类可以覆盖基类中的任何方法。可以在方法中调用基类。类中同名的方法对象可以包含任意数量和类型的数据。3.类定义语法格式如下:classClassName:。..类实例化后,就可以使用它的属性了。实际上,类创建后,可以通过类名访问其属性。4.类对象(1)属性引用和实例化类对象支持两种操作:属性引用和实例化。属性引用使用与Python中所有属性引用相同的标准语法:obj.name。创建类对象后,类命名空间中的所有名称都是有效的属性名称。所以如果类定义是这样的:classNewClass:"""Asimpleclassinstance"""num=123456deff(self):return'helloShowMeAI'#instantiateclassx=NewClass()#accessclasspropertiesandThemethodprint("NewClass类的属性num为:",x.num)print("NewClass类的方法f的输出为:",x.f())创建一个新的类实例并赋值给对象到局部变量x,一个x为空的对象。执行上述程序的输出为:NewClass类的属性num为:123456NewClass类的方法f输出为:helloShowMeAI(2)构造器类有一个特殊的方法(constructor/constructor),名为__init__(),which方法会在类实例化的时候自动调用,像这样:def__init__(self):self.data=[]类定义了__init__()方法,类的实例化会自动调用__init__()方法。类NewClass实例化如下,会调用对应的__init__()方法:x=NewClass()当然__init__()方法可以有参数,参数通过__init__传递给类的实例化操作().例如(代码可以在在线python3环境下运行):classMyComplex:def__init__(self,real_part,imag_part):self.r=real_partself.i=imag_partx=MyComplex(5.0,-3.4)print(x.r,x.i)#输出:5.0-3.4(3)self表示类的实例,非类类的方法与普通函数只有一个特殊的区别——必须多一个第一个参数名,按照惯例命名为self。classTest:defprt(self):print(self)print(self.__class__)t=Test()t.prt()以上实例的执行结果为:<__main__.Testinstanceat0x100724179>__main__.Testpassed执行结果,可以看出self代表类的实例(包括当前对象的地址信息),self.class指向类。注意这里的self不是python关键字,如果改成别的名字,比如showmeai,可以正常执行(代码可以在在线python3环境下运行):classTest:defprt(showmeai):print(showmeai)print(showmeai.__class__)t=Test()t.prt()上述实例的执行结果为:<__main__.Testinstanceat0x100724179>__main__.Test5。类的方法在类内部,我们可以使用def关键字来定义类方法,类方法必须包含参数self,它是第一个参数,self代表类的实例。例如(代码可以在线上python3环境运行)classPerson:#定义基本属性name=''age=0#定义私有属性,私有属性不能在类外直接访问__weight=0#定义构造方法def__init__(self,n,a,w):self.name=nself.age=aself.__weight=wdeftalk(self):print("%s的年龄是%d岁。"%(self.name,self.age))#Instantiateclassp=Person('ShowMeAI',30,30)p.talk()执行上面的程序,输出结果为:ShowMeAI的年龄为30岁。6.继承Python也支持类继承。派生类的定义如下:classDerivedClass(BaseClass):。..子类(派生类/DerivedClass)会继承父类(基类/BaseClass)的属性和方法。BaseClassName(实例中的基类名称)必须在与派生类相同的范围内定义。除了类之外,还可以使用表达式,这在基类定义在另一个模块中时非常有用:classDerivedClassName(modname.BaseClassName):#Classdefinitionclassperson:#Definebasicattributesname=''age=0#定义私有属性,私有属性不能在类外直接访问__weight=0#定义构造函数def__init__(self,n,a,w):self.name=nself.age=aself.__weight=wdeftalk(self):print("%s的年龄是%d岁。"%(self.name,self.age))#单继承示例classstudent(person):grade=''def__init__(self,n,a,w,g):#调用父类people的构造函数。__init__(self,n,a,w)self.grade=g#重写父类的方法deftalk(self):print("%s%d岁,目前在读%d年级"%(self.name,self.age,self.grade))s=student('小秀',12,60,5)s.talk()执行以上程序,输出结果为:小秀12岁,目前在读5年级7.MultipleInheritancePython也支持多重继承形式,多重继承的类定义如下:classDerivedClassName(Base1,Base2,Base3):...注意括号中的父类顺序,如果父类中有相同的方法名,但在子类中使用时没有指定,python从左到右查找,即子类中没有找到该方法时,它从左搜索到right查看父类中是否包含该方法。#类定义classperson:#定义基本属性name=''age=0#定义私有属性,不能在类外直接访问__weight=0#定义构造methoddef__init__(self,n,a,w):self.name=nself.age=aself.__weight=wdefspeak(self):print("%s的年龄是%d岁。"%(self.name,self.age))#单继承示例classstudent(person):grade=''def__init__(self,n,a,w,g):#调用父类people的构造函数。__init__(self,n,a,w)self.grade=g#重写父类的方法deftalk(self):print("%s%d岁,目前在读%d年级"%(self.name,self.age,self.grade))#另一个类,多重继承类之前的准备speaker():topic=''name=''def__init__(self,n,t):self.name=nself.topic=tdeftalk(self):print("%s是一位演讲者,他今天演讲的主题是%s"%(self.name,self.topic))#多继承类sample(speaker,student):a=''def__init__(self,n,a,w,g,t):student.__init__(self,n,a,w,g)speaker.__init__(self,n,t)test=sample("ShowMeAI",25,80,4,"Python")test.talk()#方法同名,默认调用括号中父类的方法。执行上面的程序,输出结果是:ShowMeAI是演讲者,今天ta演讲的题目是Python8。方法重写如果你的父类方法的功能不能满足你的需求,你可以在子类中重写你的父类方法。示例如下:classParent:#定义父类defmy_method(self):print('调用父类方法')classChild(Parent):#定义子类defmy_method(self):print('调用子类方法')c=Child()#子类实例c.my_method()#子类调用覆盖方法super(Child,c).my_method()#使用子类对象的super()函数用于调用父类(超类)的方法。上面程序的输出是:调用子类的方法,调用父类的方法。9、类的属性和方法(1)类的私有属性__private_attrs:以两个下划线开头,声明为私有属性,不能在类外使用或直接访问。可以在类内部的方法中使用,使用方法为self.__private_attrs。(2)类的方法类内部定义的成员方法必须包含参数self,self是第一个参数,self代表类的实例。self这个名字不是必须的,你也可以用这个,但是建议按照约定使用self。(3)类的私有方法__private_method:以两个下划线开头,声明为私有方法。只能在类内部调用,使用的方法是self.__private_methods。类私有属性示例代码如下:classNewCounter:__secret_count=0#privatevariablepublic_count=0#publicvariabledefcount(self):self.__secret_count+=1self.public_count+=1print(self.__secret_count)counter=NewCounter()counter.count()counter.count()print(counter.public_count)print(counter.__secret_count)#报错,实例不能访问私有变量执行上面的程序并输出结果is:122Traceback(mostrecentcalllast):File"test.py",line16,inprint(counter.__secret_count)#报错,实例无法访问私有变量AttributeError:'NewCounter'objecthas没有属性'__secret_count'类的私有方法实例如下:classWebSite:def__init__(self,name,url):self.name=name#publicself.__url=url#privatedefwho(self):print('name:',self.name)print('url:',self.__url)def__foo(self):#私有方法print('这是一个私有方法')deffoo(self):#公共方法print('这是一个公共方法')self.__foo()x=WebSite('ShowMeAIKnowledgeCommunity','www.showmeai.tech')x.who()#正常输出x.foo()#正常输出x.__foo()#错误(4)类的专有方法:__init__:构造函数,生成对象时调用__del__:析构函数,释放对象时使用__repr__:打印、转换__setitem__:按索引赋值__getitem__:按索引取值__len__:获取长度__cmp__:比较运算__call__:函数调用__add__:加法运算__sub__:减法__mul__:乘法__truediv__:除法__mod__:取余__pow__:Power(5)运算符重载Python也支持运算符重载。我们可以重载类的专有方法。例子如下:classMyVector:def__init__(self,a,b):self.a=aself.b=bdef__str__(self):return'Vector(%d,%d)'%(self.a,self.b)def__add__(self,other):returnVector(self.a+other.a,self.b+other.b)v1=MyVector(2,10)v2=MyVector(5,-2)打印(v1+v2)上面的代码执行结果如下:Vector(7,8)10.视频教程也可以点这里查看B站有【中英文字幕】的版本https://www.bilibili.com/video...资料与代码本系列教程的下载代码可以在ShowMeAI对应的github上下载。可以在本地python环境中运行。会科学上网的宝宝,也可以使用googlecolab,一键互动运行学习!本系列教程涉及的Python备忘单可在以下地址下载:Python备忘单扩展参考资料Python教程-Python3文档Python教程-廖雪峰官网ShowMeAI相关文章python推荐基本数据类型python运算符pythonn条件控制和if语句python循环语句pythonwhile循环pythonfor循环pythonbreak语句pythoncontinue语句pythonpass语句python字符串和操作python列表python元组python字典pythonsetpython函数python迭代器和生成器python数据结构python模块python文件读取并编写python文件和目录操作python错误和异常处理python面向对象编程python命名空间和作用域python时间和日期ShowMeAI系列教程推荐图文Python编程:从入门到精通系列教程图解数据分析:从入门到精通MasterySeriesTutorialsIllustratedAI数学基础:从入门到精通大师系列教程图解大数据技术:从初学者到大师系列教程