VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python基础(24):面向对象三大特性一(继承)(2)

'
  •  
  • def look_after_house(self):
  • print('汪汪叫')
  •  
  •  
  • # ######### 执行 #########
  •  
  • c1 = Cat('小白家的小黑猫')
  • c1.eat()
  •  
  • c2 = Cat('小黑的小白猫')
  • c2.drink()
  •  
  • d1 = Dog('胖子家的小瘦狗')
  • d1.eat()
  • 在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时。

    我们不可能从头开始写一个类B,这就用到了类的继承的概念。

    通过继承的方式新建类B,让B继承A,B会‘遗传’A的所有属性(数据属性和函数属性),实现代码重用。

    
    
    1. class Animal:
    2. '''
    3. 人和狗都是动物,所以创造一个Animal基类
    4. '''
    5. def __init__(self, name, aggressivity, life_value):
    6. self.name = name # 人和狗都有自己的昵称;
    7. self.aggressivity = aggressivity # 人和狗都有自己的攻击力;
    8. self.life_value = life_value # 人和狗都有自己的生命值;
    9.  
    10. def eat(self):
    11. print('%s is eating'%self.name)
    12.  
    13. class Dog(Animal):
    14. pass
    15.  
    16. class Person(Animal):
    17. pass
    18.  
    19. egg = Person('egon',10,1000)
    20. ha2 = Dog('二愣子',50,1000)
    21. egg.eat()
    22. ha2.eat()

    提示:用已经有的类建立一个新的类,这样就重用了已经有的软件中的一部分设置大部分,大大生了编程工作量,这就是常说的软件重用,不仅可以重用自己的类,也可以继承别人的,比如标准库,来定制新的数据类型,这样就是大大缩短了软件开发周期,对大型软件开发来说,意义重大。

    1.4 派生

    当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。

    
    
    1. class Animal:
    2. '''
    3. 人和狗都是动物,所以创造一个Animal基类
    4. '''
    5. def __init__(self, name, aggressivity, life_value):
    6. self.name = name # 人和狗都有自己的昵称;
    7. self.aggressivity = aggressivity # 人和狗都有自己的攻击力;
    8. self.life_value = life_value # 人和狗都有自己的生命值;
    9.  
    10. def eat(self):
    11. print('%s is eating'%self.name)
    12.  
    13. class Dog(Animal):
    14. '''
    15. 狗类,继承Animal类
    16. '''
    17. def bite(self, people):
    18. '''
    19. 派生:狗有咬人的技能
    20. :param people:
    21. '''
    22. people.life_value -= self.aggressivity
    23.  
    24. class Person(Animal):
    25. '''
    26. 人类,继承Animal
    27. '''
    28. def attack(self, dog):
    29. '''
    30. 派生:人有攻击的技能
    31. :param dog:
    32. '''
    33. dog.life_value -= self.aggressivity
    34.  
    35. egg = Person('egon',10,1000)
    36. ha2 = Dog('二愣子',50,1000)
    37. print(ha2.life_value)
    38. print(egg.attack(ha2))
    39. print(ha2.life_value)

    注意:像ha2.life_value之类的属性引用,会先从实例中找life_value然后去类中找,然后再去父类中找...直到最顶级的父类。

    在子类中,新建的重名的函数属性,在编辑函数内功能的时候,有可能需要重用父类中重名的那个函数功能,应该是用调用普通函数的方式,即:类名.func(),此时就与调用普通函数无异了,因此即便是self参数也要为其传值。

    在python3中,子类执行父类的方法也可以直接用super方法。

    
    
    1. class A:
    2. def hahaha(self):
    3. print('A')
    4.  
    5. class B(A):
    6. def hahaha(self):
    7. super().hahaha()
    8. #super(B,self).hahaha()
    9. #A.hahaha(self)
    10. print('B')
    11.  
    12. a = A()
    13. b = B()
    14. b.hahaha()
    15. super(B,b).hahaha()
    
    
    1. class Animal:
    2. '''
    3. 人和狗都是动物,所以创造一个Animal基类
    4. '''
    5. def __init__(self, name, aggressivity, life_value):
    6. self.
    
    相关教程