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)) # 有很多默认的内置属性和方法