python学习笔记(8)-类和对象——继承

python学习笔记(8)-类和对象——继承,第1张

继承

继承实现代码的重用,相同的代码不需要重复的编写
多态不同的对象调用相同的方法,产生不同的执行结果增加代码的灵活度

继承的概念:

子类拥有父类的所有方法和属性
继承的语法:

class 类名{父类}
	pass
class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
    def run(self):
        print("跑")
    def sleep(self):
        print("睡")


class Dog(Animal):

    def bark(self):
        print("狗叫")

wangcai = Dog()

wangcai.eat()
wangcai.drink()
wamhcao.run()
wangcai.bark
继承的专业术语

Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类继承
Dog类是Animal类的派生类,Animal是Dog类的基类,Dog类是Animal类派生

继承的传递性

C继承B B继承A ,实际上C是继承了A的

方法的重写

子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
当父类的方法实现不能满足子类需求时,可以对方法进行重写
方法有两种

  1. 覆盖父类的方法:相当于在子类中定义了一个和父类同名的方法
  2. 对父类方法进行拓展:在子类中重写父类的方法;在需要的位置使用super(),父类方法 来调用父类方法的执行;代码其他的位置针对子类的需求,编写子类特有的代码实现
    关于super()
  3. 特殊的类
  4. 就是使用super类创建出来的对象
  5. 最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现
class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
    def run(self):
        print("跑")
    def sleep(self):
        print("睡")


class Dog(Animal):

    def bark(self):
        print("狗叫")

class Xiaotianquan(Dog):
    def fly(self):
        print("我会飞")
    def bark(self):
        print("像神一样的在叫")#针对子类特有的需求编写代码

        super().bark()#使用super类调用原本在父类中封装的方法

        print("!@#!@!@$@!#!@#")#增加其他子类的代码

wangcai = Xiaotianquan()

wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.bark()

结果:

吃
喝
跑
像神一样的在叫
狗叫
!@#!@!@$@!#!@#
私有属性和私有方法

1.子类对象不能再自己的方法内部,直接访问父类的私有属性或私有方法
2.子类对象可以通过父类的公有方法间接访问到私有属性或私有方法

class A:
    def __init__(self):
        self.num1   = 100
        self.__num2 = 200

    def __test(self):
        print("私有方法%d %d"%(self.num1,self.__num2))
    def test(self):
        print("父类的公有方法 %d"% self.__num2)
        self.__test()
class B(A):
    def demo(self):

        #1.在子类的对象方法中,不能访问父类的私有属性
        #print("访问父类的私有属性 %d"% self.__num2)
        #2.在子类的对象方法中,不能调用父类的私有方法
        #self.__test()
        #3.在子类的对象方法中,通过父类的公有方法访问到父类的私有属性和私有 方法
        self.test()
b = B()
b.demo()
#在外界不能直接访问对象的私有属性/调用私有方法
#print(b,__num2)print(b.__test)都报错

结果:

父类的公有方法 200
私有方法100 200
多继承

子类可以拥有多个父类,并且具有所有父类的属性和方法
语法:class 子类(父类名1,父类名2) pass

使用多继承的注意事项

在不同的父类中存在 同名的方法, 子类对象 在调用同名方法时,
在开发的时候要避免使用多继承

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/799146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存