0
点赞
收藏
分享

微信扫一扫

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

一脸伟人痣 2022-05-05 阅读 63

继承

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

继承的概念:

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

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
举报

相关推荐

0 条评论