1.前言
面向对象的三大特性,想必大家肯定是耳熟能详。就是今天要介绍的内容:封装、继承、多态。面向对象的思想都是一样的,这里我用Python进行实现!
2.封装
2.1 什么是封装呢?
封装就是:我写了一个类,我将一个类的属性、方法全部包装到了一个类中。我对类中某些方法和属性进行了隐藏,(外部实例化之后,无法通过对象.方法或对象.属性来进行直接调用)。因为我不想让外部了解我的实现机理或属性,但是会留出一些公开的方法来供外部间接调用这些“封装”好的属性和方法!这就是封装!!!
2.2代码示例
# coding:utf-8class Parents(object):__name = "kaka"__age = 35job = "teacher"def __hobby(self):print("pingpong")# 调用私有方法hobbydef get_hobby(self):self.__hobby()# 获取年龄def get_age(self):return self.__age# 获取姓名def get_name(self):return self.__nameif __name__ == "__main__":# 实例化p = Parents()# 调用封装好的私有属性print(p.name)print(p.__name)
# coding:utf-8class Parents(object):__name = "kaka"__age = 35job = "teacher"def __hobby(self):print("pingpong")# 调用私有方法hobbydef get_hobby(self):self.__hobby()# 获取年龄def get_age(self):return self.__age# 获取姓名def get_name(self):return self.__nameif __name__ == "__main__":# 实例化p = Parents()# 调用封装好的私有方法p.hobby()
# coding:utf-8class Parents(object):__name = "kaka"__age = 35job = "teacher"def __hobby(self):print("pingpong")# 调用私有方法hobbydef get_hobby(self):self.__hobby()# 获取年龄def get_age(self):return self.__age# 获取姓名def get_name(self):return self.__nameif __name__ == "__main__":# 实例化p = Parents()# 通过留出来的公有方法进行获取封装好的属性print(p.get_name())print(p.get_age())# 通过留出来的公有方法进行调用封装好的方法p.get_hobby()
3.继承
3.1什么是继承?
字面意思就是,一个类是另一个类的子类,那么这个类就可以拥有和父类一样的属性、方法。这就好比是现实当中,儿子会遗传父亲的性格、长相等。
3.2 单继承
单继承就是,这个类只继承了一个父类,只拥有一个父类的属性和方法。
# coding:utf-8# 父类
class Father(object):sex = "male"job = "teacher"age = 35surname = "Zhang"def run(self):print("running...")def hobby(self):print("basketball")# 子类
class Son(Father):job = "student"age = 10def hobby(self):print("swimming...")if __name__ == "__main__":s = Son()# 继承了父亲的性别和姓氏print(s.sex)print(s.surname)
3.3多继承
多继承就是当前子类继承了多个父类,这样就拥有了多个父类的属性和方法。如果父类有相同的属性和方法,优先继承靠前父类的属性和方法。
# coding:utf-8# 父类
class Father(object):sex = "male"job = "teacher"age = 35surname = "Zhang"def run(self):print("running...")def hobby(self):print("basketball")# 母亲类
class Mother(object):sex = "female"job = "doctor"age = 35surname = "Li"def run(self):print("running...")def hobby(self):print("pingpong")def test(self):print("hello")# 多继承,先继承了Father类,然后继承了Mother类
class Son(Father, Mother):job = "student"age = 10if __name__ == "__main__":s = Son()# 两个父类里面都有surname和sex# 因为先继承的Father类,所以表现的是Father类的属性print(s.surname, s.sex)# 因为先继承的Father类,所以表现的是Father类的方法s.hobby()# 继承了Mother类的test方法s.test()
4.多态
4.1什么是多态?
举一个现实中的例子,同样的一件事情,不同的人处理起来,他们的实现过程是完全不同的,会表现出不同的形态。比如:都是吃饭这个事情,中国人表现的是用筷子吃饭,而美国人表现的是用叉刀吃饭。这个就是相同的事情,表现出了不同的“形态”。
4.2多态的注意点
(1)多态的前提是:继承、重写。
(2)多态指的是方法的多态,多态与属性无关。
4.3代码示例
# coding:utf-8# 父类
class Father(object):def __init__(self, sex, job, age, surname):self.sex = sexself.job = jobself.age = ageself.surname = surnamedef run(self):print("running...")def hobby(self):print("basketball")# 子类1
class Son(Father):def __init__(self, sex, job, age, surname, school_name):# 调用父类现有方法super().__init__(sex, job, age, surname)# 进行扩展self.school_name = school_name# 重写def hobby(self):print("swimming")# 子类2
class Daughter(Father):def __init__(self, sex, job, age, surname, school_name):# 调用父类现有方法super().__init__(sex, job, age, surname)# 进行扩展self.school_name = school_name# 重写def hobby(self):print("drawing")# 获取爱好
def get_hobby(obj):obj.hobby()if __name__ == "__main__":s = Son(sex="male", job="student", age=10, surname="Zhang", school_name="CHD")d = Daughter(sex="female", job="student", age=12, surname="Zhang", school_name="CHD")# 将s、d两个对象传入相同的函数get_hobbyget_hobby(s)get_hobby(d)