继承
子类 父类
class DerivedClassName(BaseClassName):
……
实例:一个子类可以继承它的父类的所有属性和方法
1 >>> class Parent: 2 def hello(self): 3 print('正在调用父类的方法。。。') 4 5 6 7 >>> class Child(Parent): #子类继承父类 8 pass #直接往下执行 9 10 >>> p = Parent() 11 >>> p.hello() 12 正在调用父类的方法。。。 13 >>> c = Child() 14 >>> c.hello() 15 正在调用父类的方法。。。
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法和属性(即子类方法属性改变,父类是不变的)
1 >>> class Child(Parent): 2 def hello(self): 3 print('正在调用子类的方法') 4 5 6 >>> c = Child() 7 >>> c.hello() 8 正在调用子类的方法 9 >>> p.hello() 10 正在调用父类的方法。。。
实例2:
1 import random as r 2 class Fish: 3 def __init__(self): 4 self.x = r.randint(0,10) 5 self.y = r.randint(0,10) 6 7 def move(self): 8 self.x -= 1 9 print('我的位置是:',self.x,self.y) 10 11 12 class Goldfish(Fish): 13 pass 14 15 class Garp(Fish): 16 pass 17 18 class Shark(Fish): 19 def __init__(self): 20 self.hungry = True 21 22 def eat(self): 23 if self.hungry: 24 print('吃货的梦想就是天天有的吃') 25 self.hungry = False 26 else: 27 print('太撑了,吃不下了!') 28 29 >>> fish = Fish() 30 >>> fish.move() 31 我的位置是: -1 10 32 >>> fish.move() 33 我的位置是: -2 10 34 >>> goldfish = Goldfish() 35 >>> goldfish.move() 36 我的位置是: 2 3 37 >>> goldfish.move() 38 我的位置是: 1 3 39 >>> shark = Shark() 40 >>> shark.eat() 41 吃货的梦想就是天天有的吃 42 >>> shark.eat() 43 太撑了,吃不下了! 44 >>> shark.move() #报错原因时因为子类重写构造函数,覆盖了父类D的构造函数 45 Traceback (most recent call last): 46 File "<pyshell#9>", line 1, in <module> 47 shark.move() 48 File "D:\python3.3.2\小甲鱼python\python程序\第三十八节课\fish.py", line 8, in move 49 self.x -= 1 50 AttributeError: 'Shark' object has no attribute 'x'
注:继承父类属性的子类,其变量值只属于当前子类,是子类的局部变量
报错修改部分解决方法一:调用未绑定的父类方法
>>> shark = Shark()
>>> shark.move()
我的位置是: 2 1
>>> shark.move()
我的位置是: 1 1
报错修改部分解决方法二:使用super函数(super函数会帮我们自动找到基类的方法,而且还自动为我们传入self参数)
>>> shark = Shark()
>>> shark.move()
我的位置是: 1 1
>>> shark.move()
我的位置是: 0 1
多重继承
class DerivedClassName(Base1, Base2, Base3):
……
实例:子类c同时继承基类Base1和基类Base2
1 >>> class Base1: 2 def fool1(self): 3 print('我是fool1,我为Base1代言。。。') 4 5 6 >>> class Base2: 7 def fool2(self): 8 print('我是fool2,我为Base2代言。。。') 9 10 11 >>> class C(Base1,Base2): 12 pass 13 14 >>> c = C() 15 >>> c.fool1() 16 我是fool1,我为Base1代言。。。 17 >>> c.fool2() 18 我是fool2,我为Base2代言。。。
标签:shark,入门,Python,子类,self,move,038,父类,class From: https://www.cnblogs.com/ybqjymy/p/17650578.html