class DerivedClassName(BaseClassName):
....
#BaseClassName :父类,基类,超类
#DerivedClassName: 子类
class Parent:
def hello(self):
print('正在调用父类的方法...')
class Child(Parent):
pass
P =Parent() #定义一个父类的对象
P.hello()
C = Child() #定义一个子类的对象
C.hello()
class C:
def x(self):
print('x-man')
c=C()
c.x()
c.x=1 #创建一个实例对象c的实例属性x,此时同名属性会覆盖方法
print(c.x)
c.x()
class Child(Parent):
def hello(self):
print('正在调用子类的方法')
P =Parent()
P.hello()
C = Child() #子类可以继承父类的方法,调用父类的方法
C.hello()
class Fish: #父类 fish
def __init__(self):
self.x = random.randint(0, 10) # x轴坐标
self.y = random.randint(0, 10) # y轴坐标
def move(self):
self.x-=1
print('my location is :', self.x, self.y)
class GoldFish(Fish): #子类 goldfish
pass #不做处理
class Shark(Fish): #子类shark
def __init__(self): #子类重写了父类的方法,覆盖了父类的定义
self.hungry=True
def eat(self):
if self.hungry:
print('吃货的梦想就是吃不胖!')
self.hungry = False
else:
print('吃不下了!')
三个类分别定义实例对象的调用:
fish = Fish()
fish.move()
fish.move()
goldfish= GoldFish()
goldfish.move()
goldfish.move()
shark =Shark()
shark.eat()
shark.eat()
# shark.move() #报错,因为子类init方法覆盖了父类,没有给出self.x,self.y定义
class Shark(Fish):
def __init__(self): #子类重写了父类的方法,覆盖了父类的定义
Fish.__init__(self) #调用未绑定的父类方法 这个self是子类的实例对象
self.hungry=True
def eat(self):
if self.hungry:
print('吃货的梦想就是吃不胖!')
self.hungry = False
else:
print('吃不下了!')
shark =Shark()
shark.eat()
shark.eat()
shark.move()
但是每次调用未绑定父类方法都需要父类对象的名字,如果父类对象更名,则会很麻烦,所以建议使用一种更方便的方法
class Shark(Fish):
def __init__(self): #子类重写了父类的方法,覆盖了
super().__init__() #super函数,自动为子类找到基类方法且传入self参数
self.hungry=True
def eat(self):
if self.hungry:
print('吃货的梦想就是吃不胖!')
self.hungry = False
else:
print('吃不下了!')
shark = Shark()
shark.eat()
shark.eat()
shark.move()
class DerivedClassName(base1,base2....):
class Base1:
def fool1(self):
print('im fool1')
class Base2:
def fool2(self):
print('im fool2')
class C(Base1,Base2):
pass
c= C()
c.fool1()
c.fool2()