Heim > Backend-Entwicklung > Python-Tutorial > Python Zero: Grundlegende Einführung in die Vererbung

Python Zero: Grundlegende Einführung in die Vererbung

黄舟
Freigeben: 2017-01-16 14:42:16
Original
1021 Leute haben es durchsucht

Im vorherigen Blog habe ich kurz über die Syntax der Klassenvererbung gesprochen. Heute werde ich ausführlich auf das damit verbundene Wissen von Klassen eingehen.
Verwenden Sie zunächst einen Code, um die Vererbung der zuvor gelernten Klassen zu überprüfen:

class Parent:
     def hello(self):
          print("正在调用父类的方法.....")class Child(Parent):
    # pass
    def hello(self):
         print("正在调用子类的方法.....")
p=Parent()
p.hello()
c=Child()
c.hello()
Nach dem Login kopieren

Python Zero: Grundlegende Einführung in die Vererbung


Benötigt in die Vererbung von Klassen. Mehrere Punkte sind zu beachten:
(1) Wenn eine Methode oder ein Attribut mit demselben Namen wie die übergeordnete Klasse in einer Unterklasse definiert ist, wird die entsprechende Methode oder das entsprechende Attribut der übergeordneten Klasse automatisch überschrieben.

import random as rclass Fish:
     def __init__(self):
          self.x=r.randint(0,10)
          self.y=r.randint(0,10)     def move(self):
          self.x-=1
          print("我的位置是:",self.x,self.y)class Goldfish(Fish):
     passclass Carp(Fish):
     passclass Salmon(Fish):
     passclass Shark(Fish):
     def __init__(self):
          #调用未绑定的父类方法,传进去的是子类的实例化对象
          #Fish.__init__(self)
          #使用super()函数
          super().__init__()
          self.hungry=True
     def eat(self):
          if self.hungry:
               print("吃货的梦想是天天有的吃")
               self.hungry=False
          else:
               print("太撑了,吃不下了")
shark=Shark()
shark.move()#这样写的话程序会报错,因为子类Shark重写了了#__init__方法,这样就会覆盖父类的__init__方法
Nach dem Login kopieren

(2) Python unterstützt auch Mehrfachvererbung

class Base1:
     def foo1(self):
          print("我是foo1,我为Base1代言...")class Base2:
     def foo2(self):
          print("我是foo2,我为Base2代言...")class C(Base1,Base2):
     passc=C()
c.foo1()
c.foo2()
Nach dem Login kopieren

Python Zero: Grundlegende Einführung in die Vererbung

(3) Wenn zwischen mehreren Klassen keine direkte Vererbungsbeziehung besteht Wir können Kombinationen verwenden.
Zum Beispiel haben die drei Klassen Turtle, Fish und Pool im folgenden Code keine offensichtliche Vererbungsbeziehung zwischen ihnen, aber die Verwendung einer Kombination kann die Probleme zwischen diesen Klassen leicht lösen. Der folgende Code löst das Problem der Ausgabe der Anzahl der Goldfische und Schildkröten im Teich. Die Hauptlösung besteht darin, die Schildkröten- und Goldfisch-Instanziierungen in die Teichklasse aufzunehmen.

class Turtle:
     def __init__(self,x):
          self.num=xclass Fish:
     def __init__(self,x):
          self.num=xclass Pool:
     def __init__(self,x,y):
          #将类的实例化放到另一个类中
          self.turtle=Turtle(x)
          self.fish=Fish(y)     def print_num(self):
          print("水池里总共有乌龟%d只,小鱼%d条!"%(self.turtle.num,self.fish.num))
pool=Pool(1,10)
pool.print_num()
Nach dem Login kopieren

Fügen Sie abschließend einige integrierte Funktionen zur Klasse hinzu:

#前面是子类,后面是基类
#issubclass(class,classinfo)
#判断一个类是否为另一个类的子类
#一个类被认为是自身的子类class A:
     passclass B(A):
     passprint(issubclass(B,A))
#isinstance(object,classinfo)
#前面是一个实例化对象,后面是类#检查实例对象是否属于这个类b1=B();
print(isinstance(b1,B))
#hasattr(object,name)
#测试一个对象是否有特定的属性class C:
     def __init__(self,x=0):
          self.x=x#一定要注意Python没有变量的定义c1=C()
print(hasattr(c1,"x"))
#getattr(object,name[,default])
#返回对象指定的属性值,如果不存在,打印设置的默认值print(getattr(c1,'x'))
print(getattr(c1,'y',"您访问的参数不存在"))
#setattr(object,name,value)
#设定属性的值,如果不存在,会自动新建setattr(c1,"y","Yaoxiangxi")
print(getattr(c1,'y',"您访问的参数不存在"))#delattr(object,name)
#删除属性delattr(c1,'y')
#property(fget=None,fset=None,fdel=None,doc=None)
#通过属性设置属性class C:
     def __init__(self,size=10):
          self.size=size     def getSize(self):
          return self.size     def setSize(self,value):
          self.size=value     def delSize(self):
          del self.size #删除某个属性
     #便于代码的修改
     x=property(getSize,setSize,delSize)
c1=C()
print(c1.getSize())
print(c1.x)
c1.x=100print(c1.x)
Nach dem Login kopieren

Python Zero: Grundlegende Einführung in die Vererbung

Die letzte Eigenschaft wird im Deskriptor-Blog ausführlich erläutert.

Das Obige ist der Inhalt, der aus dem vierzehnten Kapitel der nullbasierten Einführung in Python übernommen wurde. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage