python节点之间的继承关系_Python -- 继承关系

什么是继承?

专业角度:B类继承A类,B类就叫做A的子类/派生类,A就叫做B类的父类/超类

B类以及B类的对象可以使用A 类的所有的属性以及方法

继承的优点:

节省代码

增强耦合性

使代码更加规范化

通过一个例子看一下继承:

class Person:

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

class Cat:

def __init__(self,name,sex,age):

self.name = name

self.age = age

self.sex = sex

class Dog:

def __init__(self,name,sex,age):

self.name = name

self.age = age

self.sex = sex

# 继承的用法

class Animal:

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

class Person(Animal):

psss

class Dog(Animal):

pass

class Cat(Animal):

pass

单继承

从类名执行父类的属性

从对象执行父类的属一切(实例化对象一定会发生三件事,一定会执行__init__)

注意:子类以及子类对象只能调用父类的属性以及方法,不能操作(增删改)

class Animal:

live = '有生命'

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

def eat(self):

print(self) # 哪个对象执行方法就将这个对象的地址传给方法中的self

print('都要吃饭')

class Dog(Animal):

pass

d = Dog('黑豆',6,'ladboy')

print(d.__dict__)

print(d.live)

d.eat()

#如何既要执行父类方法又要执子类方法

class Animal:

live = '有生命'

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

def eat(self):

# print(self)

print('都要吃饭')

class Dog(Animal):

def __init__(self,name,age,sex,hobby):

# Animal.__init__(self,name,age,sex) # 方法一

# super(Dog,self).__init__(name,age,sex) # 方法二

super().__init__(name,age,sex) # 方法二简写

self.hobby = hobby

def eat(self):

super().eat()

print('吃饭啦')

d = Dog('黑豆',6,'ladboy','抢球')

print(d.__dict__)

d.eat()

# 执行顺序: 实例化对象必须执行__init__方法,子类中没有,从父类中找,父类没有,从object中找

# 先要执行自己类中的eat方法,自己类没有才能执行父类的方法

# 单继承练习题

class Base:

def __init__(self, num):

self.num = num # num = 123

def func1(self):

print(self.num)

class Foo(Base):

pass

obj = Foo(123)

obj.func1() # 123 运⾏的是Base中的func1

class Base:

def __init__(self, num):

self.num = num # num = 123

def func1(self):

print(self.num)

class Foo(Base):

def func1(self):

print("Foo. func1", self.num)

obj = Foo(123)

obj.func1() # Foo. func1 123 运⾏的是Foo中的func1

class Base:

def __init__(self, num):

self.num = num

def func1(self):

print(self.num)

self.func2()

def func2(self):

print("Base.func2")

class Foo(Base):

def func2(self):

print("Foo.func2")

obj = Foo(123)

obj.func1() # 123 Foo.func2 func1是Base中的 func2是⼦类中的

class Base:

def __init__(self, num):

self.num = num

def func1(self):

print(self.num)

self.func2()

def func2(self):

print(111, self.num)

class Foo(Base):

def func2(self):

print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]

for obj in lst:

obj.func2() # 111 1 | 111 2 | 222 3

class Base:

def __init__(self, num):

self.num = num

def func1(self):

print(self.num)

self.func2()

def func2(self):

print(111, self.num)

class Foo(Base):

def func2(self):

print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]

for obj in lst:

obj.func1()

多继承

class ShenXian: # 神仙

def fei(self):

print("神仙都会⻜")

class Monkey: # 猴

def chitao(self):

print("猴⼦喜欢吃桃⼦")

class SunWukong(ShenXian, Monkey): # 孙悟空是神仙, 同时也是⼀只猴

pass

sxz = SunWukong() # 孙悟空

sxz.chitao() # 会吃桃⼦

sxz.fei() # 会⻜

Python中类的种类(继承需要):

在Python2.2之前都是经典类

Python2.2--2.7之间存在两种类型,经典类和新式类.

经典类:基类不继承object 查询规则:依靠深度优先的原则(从左到右,每次走到头)

新式类:基类必须继承object 查询规则:mro算法

Python3X 只有新式类. 如果基类谁都不继承. 那这个类会默认继承 object

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值