fish.py:
该代码块中,子类Shark无法使用父类中的x,y属性
import random as r
class 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):
pass
class Carp(Fish):
pass
class Salmon(Fish):
pass
class Shark(Fish):
def __init__(self)
self.hungry = True
def eat(self):
if self.hungry:
print("一只,两只,三只。。")
self.hungry = False
else:
print("太棒了,有好多")
shell中运行结果:
>>> fish = Fish()
>>> fish.move()
我的位置是: 0 5
>>> goldfish = Goldfish()
>>> goldfish.move()
我的位置是: 0 10
>>> goldfish.move()
我的位置是: -1 10
>>> carp = Carp()
>>> carp.move()
我的位置是: -1 3
>>> carp.move()
我的位置是: -2 3
>>> goldfish.move()
我的位置是: -2 10
>>> shark = Shark()
>>> shark.move()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
shark.move()
File "D:/python/project/fish.py", line 12, in move
self.x-=1
AttributeError: 'Shark' object has no attribute 'x'
解决方法
1、调用未绑定的父类方法
2、使用super函数(推荐)
1、调用未绑定的父类方法
import random as r
class 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):
pass
class Carp(Fish):
pass
class Salmon(Fish):
pass
class Shark(Fish):
def __init__(self)
Fish.__init__(self) #####新增语句,用来调用未绑定的父类方法
self.hungry = True
def eat(self):
if self.hungry:
print("一只,两只,三只。。")
self.hungry = False
else:
print("太棒了,有好多")
运行结果:
>>> shark = Shark()
>>> shark.move()
我的位置是: 3 9
2、使用super函数
import random as r
class 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):
pass
class Carp(Fish):
pass
class Salmon(Fish):
pass
class Shark(Fish):
def __init__(self)
super().__init__() #####新增语句,super()可自动找出所有基类中的方法
self.hungry = True
def eat(self):
if self.hungry:
print("一只,两只,三只。。")
self.hungry = False
else:
print("太棒了,有好多")
运行结果:
>>> shark = Shark()
>>> shark.move()
我的位置是: 2 3