Python教程7

Python教程7

  1.继承

# -*-coding:utf-8-*-
"""
面向对象的三大特性:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
3.多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
"""


# 继承的概念:字类拥有父类的所有方法和属性 class 类名(父类)
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("我会飞")


wangcai = Dog()
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()
wangcai.bark()

print("-----哮天犬------")
xtq = XiaoTianQuan()
xtq.fly()
"""
专业术语:
Dog类是Animal类的字类,Animal是Dog类的父类,Dog类是从Animal类继承
Dog类是Animal类的派生类,Animal类是Dog类的基类,Dog类是从Animal类派生
"""

# 方法的重写
""""
重写父类的方法有两种:
1.覆盖父类的方法(在字类中,重新编写父类的方法实现)
2.对父类的方法进行扩展(子类的方法实现,包含父类的方法实现)
"""
print("方法的重写的实现------")


class XiaoTianQuan1(Dog):  # 覆盖父类的方法
    def fly(self):
        print("我会飞")

    def bark(self):
        print("叫得和神一样。。。")  #


xtq1 = XiaoTianQuan1()
xtq1.bark()

# 在开发中,子类的方法实现,包含父类的方法实现,
# 即父类封装的方法是子类方法的一部分,就可以用扩展方式
"""
1.在子类重写父类的方法、
2.在需要的位置使用super().父类方法来调用父类方法的执行
3.代码其他位置针对子类的需求,编写子类特有的代码实现
"""


class XiaoTianQuan2(Dog):  # 覆盖父类的方法
    def fly(self):
        print("我会飞")

    def bark(self):
        # 针对子类的需求特有的方法
        print("叫得和神一样。。。")
        # 使用super().调用父类的方法
        super().bark()
        # 其他输出
        print("$%^&$%^#$#$%")


print("父类方法的扩展")
xtq1 = XiaoTianQuan2()
xtq1.bark()

  2.父类的私有属性和私有方法

# -*-coding:utf-8-*-
# 子类对象不呢个在自己得方法内部,直接访问父类得私有属性或私有方法
# 私有属性,方法,通常用于做一些内部的事情
class A:
    def __init__(self):
        self.num1 = 100
        self.__num2 = 200  # 私有属性

    def __test(self):
        print("私有方法,%d %d" % (self.num1, self.__num2))

    def tst1(self):
        print("父类共有方法")


class B(A):
    def demo(self):
        print(self.num1)
        self.tst1()
        # print(self.__num2)外部不能访问父类的私有属性和私有方法
        # self.__test()不能调用私有方法


b = B()
print(b)
print(b.num1)
# print(b.__num2)外部不能调用私有属性或者私有方法
print(b.demo())

  3.多继承,新类和经典类

# -*-coding:utf-8-*-
"""
多继承,子类同时继承多个父类
开发时,应尽量避免使用多继承处理,父类中有相同的属性和方法
"""


class A:
    def test(self):
        print("test 方法")

    def test1(self):
        print("这是父类同方法测试,父类A")


class B:
    def demo(self):
        print("demo 方法")

    def test1(self):
        print("这是父类同方法测试,父类B")


class C(A, B):  # 子类C同时继承=父类A和父类B
    pass


# 创建子类对象
c = C()
c.test()
c.demo()
c.test1()  # 测试结果,test1方法继承自父类A,

# 新式类和经典类
"""
Python3.x使用新式类,以object为基类的类(未指定,自动继承)(推荐使用)
Python2.x使用经典类
"""


class D:  # 演示2.x版本
    pass


class E(object):  # 演示3.x版本
    pass


d = D()
print(dir(d))  # 默认输出内置属性两个(这里我使用的python3.x,自动继承的,输出同下)
e = E()
print(dir(e))  # 有很多默认的内置属性和方法

 

posted @ 2018-11-11 09:36  君,子觞  阅读(192)  评论(0编辑  收藏  举报