python中什么叫类?
能够视为品种或许范例的同义词。一切的对象都属于某一个类,称为类的实例。
比方:鸟就是"鸟类"的实例。这就是一个有许多子类的平常(笼统)类:看到的鸟能够属于子类"百灵鸟"。能够将"鸟类"设想成一切鸟的鸠合,而"百灵鸟类"是个中的一个子集。当一个对象所属的类是别的一个对象所属类的子集时,前者就被称为后者的子类,所以"百灵鸟类"是"鸟类"的子类,"鸟类"是"百灵鸟类"的超类
定义子类只是个定义更多要领的历程.
建立类
>>> class Person: def setName(self,name): self.name=name def getName(self): return self.name def greet(self): print "Hello,world! I'm %s" % self.name >>> foo=Person()>>> bar=Person()>>> foo.setName('Nsds')>>> bar.setName('Ysdy')>>> foo.greet() Hello,world! I'm Nsds>>> bar.greet() Hello,world! I'm Ysdy
在挪用foo的setName和greet函数时,foo自动将自身作为第一个参数传入函数中,因而定名为self。没有self的话,成员要领就没法接见他们要对其特征举行操纵的对象自身了
特征是能够外部接见的:
>>> foo.name'Nsds'>>> bar.name='Yoda'>>> bar.greet() Hello,world! I'm Yoda
特征、函数、要领
self参数事实上恰是要领和函数的区分。要领将它们的第一个参数绑定到所属的实例上,因而这个参数能够没必要供应。所以能够将特征绑定到一个一般函数上,如许就不会有特别的self参数了:
(特征是对象内部的变量,对象的状况由它的特征来形貌,对象的要领能够转变它的特征,能够直接从对象外部接见特征)
>>> class Class: def method(self): print 'I have a self!' >>> def function(): print "I don't...">>> s=Class()>>> s.method() I have a self!>>> s.method=function>>> s.method() I don't...
变量birdsong援用绑定要领bird.sing上,照样对self参数的接见(依旧绑定到类的雷同实例上)
>>> class Bird: song='Squaawk' def sing(self): print self.song >>> bird=Bird()>>> bird.sing() Squaawk>>> birdsong=bird.sing>>> birdsong() Squaawk
在称号前加上双下划线,能够让要领或许特征变成私有(从外部无法接见)
>>> class Secretive: def __inaccessible(self): print "Bet you can't see me..." def accessible(self): print "The secret message is:" self.__inaccessible() >>> s=Secretive()>>> s.__inacessible() Traceback (most recent call last): File "<pyshell#182>", line 1, in <module> s.__inacessible() AttributeError: 'Secretive' object has no attribute '__inacessible'>>> s.accessible() The secret message is: Bet you can't see me...
在类的内部定义中,一切以双下划线开的名字都被"翻译"成前面加上单下划线和类名的情势
>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible> >>> s._Secretive__inaccessible() Bet you can't see me...
类的定名空间
定义类时,一切位于class语句中的代码都在特别的定名空间中实行---类的定名空间。这个定名空间可由类内一切成员接见。
类的定义实在就是实行代码块
>>> =+=1 >>> m1=>>>>>>1 >>> m1.members=2 >>>2 >>> m2=>>>>>>2 >>>>>>3 >>>2 >>>
新members值被写到了m1的特征中,屏障了类范围内的变量
超类
>>> class Filter: def init(self): self.blocked=[] def filter(self,sequence): return [x for x in sequence if x not in self.blocked] >>> class SPAMFilter(Filter): def init(self): self.blocked=['SPAM'] >>> f=Filter()>>> f.init()>>> f.filter([1,2,3]) [1, 2, 3]>>> s=SPAMFilter()>>> s.init()>>> s.filter(['SPAM','SPAM','egg','name','ff']) ['egg', 'name', 'ff']
继续,超类
>>> class Filter: def init(self): self.blockes=[] def filter(self,sequence): return [x for x in sequence if x not in self.blocked] >>> class S(Filter): def init(self): self.blocked=['s'] >>> f=Filter()>>> f.init()>>> f.filter([1,2,3])
多个超类
先继续的类中的要领会重写后继续的类中的要领
>>> class C(): def calculate(self,expression): self.value=eval(expression) >>> class Talker(): def talk(self): print 'Hi,my value is',self.value >>> class TalkingCalculator(C,Talker): pass>>> tc=TalkingCalculator()>>> tc.calculate('1+2*3')>>> tc.talk() Hi,my value is 7
相干引荐:《Python教程》
以上就是python中什么叫类的细致内容,更多请关注ki4网别的相干文章!