一. 封装
1. 什么是封装?
如第一篇文章所述https://mp.youkuaiyun.com/postedit/88782209,封装的概念就是将对象的信息放进类中,然后通过调用类来产生特殊的对象。在这个过程中,封装既可以实现对共有属性和共有方法的封装,也可以实现对私有属性和私有方法的封装。私有方法和私有属性原则上不会被外界调用【也有调用私有属性和私有方法,只不过私有属性和方法相当于隐私,尽可能不要调用】
2. 封装的举例
例子:对象张飞通过Human类来创建,张飞的属性(名字)和张飞的方法(哈哈笑)封装在Human中。
#!usr/bin/python
class Human(object):
def __init__(self,name):
self.name = name
def large_smile(self):
print("%s 哈哈笑" % self.name)
zhangfei = Human("张飞")#调用封装的属性
zhangfei.large_smile()#调用封装的方法
>>>张飞 哈哈笑
PS:object是Python2常用的基类,在Python3中不声明也可以,为了养成良好的编程习惯和避免因版本造成出现错误,以后定义父类时可以使用基类object
二. 继承
1 什么是继承?
谈继承的前提必须先提几个概念,子类、父类、类属性和类方法。举例分析:
狗类可以继承动物类中的属性和方法,哮天犬可以继承狗类和动物类中的属性和方法。
2 单继承
子类只有一个父类,叫做单继承。
语法结构 :
class 父类():
pass
class 子类(父类):
pass
3 多继承
子类有多个父类叫做多继承。
语法结构:
class 父类1():
pass
class 父类2():
pass
class 父类N():
pass
class 子类(父类1,父类2,父类3,...父类N)
在多继承时,可以简单地认为子类括弧中父类出现的顺序就是子类调用父类属性和方法的顺序。
4 继承的特殊情况——方法的重写
子类重写父类的方法有两种方式:
(1)子类在自己结构中直接重写一个重名的方法,后续调用子类创建对象时,只会使用子类的方法和属性构建对象。
(2)子类在自己结构中重写重名的方法,但是使用【类.】+方法的形式扩展父类的方法。
举例:哮天犬重写dog类中的eat方法
class dog():
def __init__(self,name):
self.name = name
def eat(self):
print("%s chichi" %self.name)
class xiaotianquan(dog):
def eat(self):
print("%s 大口吃" %self.name)
super().eat()
print("==========>>>>")
xiaotianquan=xiaotianquan("哮天犬")
xiaotianquan.eat()
哮天犬 大口吃
哮天犬 chichi
==========>>>>
三. 多态
1 什么是多态
多态指的是在继承的基础上,多个子对象从父类中继承相同的方法产生不一样的结果。
2 举例
#!usr/bin/python
class dog(object):
def __init__(self,name):
self.name = name
def game(self):
print("%s 蹦蹦玩耍" % self.name)
class xiaotianquan(dog):
def game(self):
print("%s 飞到天上去玩耍" % self.name)
class person(object):
def __init__(self,name):
self.name = name
def game_with_dog(self,dog):
print("%s 和 %s 快乐的玩耍" % (self.name,dog.name))
dog.game()
xiaoming = person("小明")
wangcai = dog("旺财")
xiaoming.game_with_dog(wangcai)
小明 和 旺财 快乐的玩耍
旺财 蹦蹦玩耍
使用xiaotianquan类创建飞天旺财,并再次调用xiaoming.game_with_dog方法:
#!usr/bin/python
class dog(object):
def __init__(self,name):
self.name = name
def game(self):
print("%s 蹦蹦玩耍" % self.name)
class xiaotianquan(dog):
def game(self):
print("%s 飞到天上去玩耍" % self.name)
class person(object):
def __init__(self,name):
self.name = name
def game_with_dog(self,dog):
print("%s 和 %s 快乐的玩耍" % (self.name,dog.name))
dog.game()
xiaoming = person("小明")
wangcai = xiaotianquan("飞天旺财")
xiaoming.game_with_dog(wangcai)
小明 和 飞天旺财 快乐的玩耍
飞天旺财 飞到天上去玩耍