版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
继承概述
与Java不同,Python不仅可以单继承还可以多继承。
语法
单继承语法如下:
class 类名(父类名):
pass
多继承语法如下:
class 类名(父类名1, 父类名2...):
pass
特征
继承的特征如下:
- 1、子类拥有父类以及父父类非私有的方法和非私有的属性
- 2、子类可自定义自身与父类以及父父类无关的方法和属性
- 3、一个父类可以有一个或多个子类
- 4、一个子类可以有一个或多个父类
- 5、子类可重写父类的方法
- 6、子类可扩展父类的方法
单继承示例
在此,以示例形式讲解面向对象的单继承特性。
示例1
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:父类与子类
"""
# 定义动物类(父类)
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print("%s吃食物" % self.name)
def sleep(self):
print("%s睡觉" % self.name)
# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
pass
# 定义猫类(子类)继承自动物类(父类)
class Cat(Animal):
pass
# 创建子类对象
dog = Dog("tom")
# 获取子类从父类继承的属性
dogName = dog.name
print(dogName)
# 调用子类从父类继承的方法
dog.eat()
dog.sleep()
# 创建子类对象
cat = Cat("mimi")
# 获取子类从父类继承的属性
catName = cat.name
print(catName)
# 调用子类从父类继承的方法
cat.eat()
cat.sleep()
示例2
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:继承的传递性
"""
# 定义动物类(父类)
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print("%s吃食物" % self.name)
def sleep(self):
print("%s睡觉" % self.name)
# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
pass
# 定义导盲犬(子类)继承自狗类(父类)
class SeeingEyeDog(Dog):
pass
# 创建子类对象
dog = SeeingEyeDog("jack")
# 获取子类从父父类继承的属性
dogName = dog.name
print(dogName)
# 调用子类从父父类继承的方法
dog.sleep()
dog.eat()
示例3
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:父类私有方法与私有属性
"""
# 定义父亲类(父类)
class Father:
def __init__(self):
self.money = 10000
# 私有属性
self.__diary = "Father diary"
def eat(self):
print("吃饭")
# 私有方法
def __secretLove(self):
print("暗恋史")
# 定义儿子类(子类)
class Son(Father):
pass
# 创建子类对象
son = Son()
# 获取子类从父类继承的非私有属性
money = son.money
print(money)
# 获取子类从父类继承的私有属性
# 报错:AttributeError: 'Son' object has no attribute '__diary'
# diary=son.__diary
# print(diary)
# 调用子类从父类继承的非私有方法
son.eat()
# 调用子类从父类继承的私有方法
# 报错:AttributeError: 'Son' object has no attribute '__secretLove'
# son.__secretLove()
super与super( )
在Python中super是一个非常特殊的类,它表示子类的父类。super() 就是使用 super 类创建出来的对象。所以,我们可在需要的位置使用 super().父类方法
的方式调用父类方法的;示例如下:
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:super与super()
"""
# 定义动物类(父类)
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print("%s吃食物" % self.name)
def sleep(self):
print("%s睡觉" % self.name)
# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
# 子类重写父类方法
def eat(self):
# 调用父类的eat方法
super().eat()
print("%s吃骨头" % self.name)
pass
# 创建子类对象
dog = Dog("tom")
dog.eat()
多继承示例
在此,以示例形式讲解面向对象的多继承特性;示例如下:
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:多继承
"""
# 定义父亲类(父类)
class Father:
def __init__(self):
self.money = 10000
def play(self):
print("打牌")
class Mother:
def __init__(self):
self.car = "red car"
def cook(self):
print("做饭")
# 定义同时继承自Father和Mother的儿子类(子类)
class Son(Father, Mother):
def __init__(self):
# 调用父类的__init__方法
Father.__init__(self)
Mother.__init__(self)
pass
# 创建子类对象
son = Son()
money = son.money
print(money)
car = son.car
print(car)
son.play()
son.cook()
object与_ _ bases _ _
在Python中object是所有对象的基类。如果一个类没有明确的父类,那么该类的默认父类就是object。
Python为所有类都提供了一个_ _ bases _ _属性,通过该属性可以查看该类的所有直接父类。
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:object与__bases__
"""
# 定义动物类(父类)
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print("%s吃食物" % self.name)
def sleep(self):
print("%s睡觉" % self.name)
# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
pass
# 获取Dog类的父类
dogBases = Dog.__bases__
print(dogBases)
# 获取Animal类的父类
animalBases = Animal.__bases__
print(animalBases)