python中封装和继承

111 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

三大要素

封装,继承和多态是面向对象编程的三大要素。

封装

一个类包含数据成员和成员方法,将类做成封装体,把类转换成对象进行使用,可以调用该对象的数据成员和对象方法。这个办法是比较常用的。

继承

  • 继承是用来实现代码复用和设计复用的机制,是面向对象程序设计的重要特性之一。设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑会大幅度减少开发工作量。
  • 在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过“基类名.方法名()”的方式来实现这一目的。
  • Python支持多继承,如果父类中有相同的方法名,而在子类中使用时没有指定父类名,则Python解释器将从左向右按顺序进行搜索。

例子

父级

class Person(object):
    def_init_(self,name=",age=20,sex=man'):
        selfsetName(name) 
        self.setAge(age) 
        self.setSex(sex)

    def setName(selfname):
        assert isinstance(name, str), 'name must be string. self.name=name

    def setAge(self,age):
        assert isinstance(age,int),'age must be integer.
        
    def setSex(self, sex):
        assert sex in (man','woman'), 'sex must be"man" or "woman"" 
        self.__sex= sex
        
    def show(self):
        print('Name:', self._name)
        print('Age:', self._age)
        print('Sex:', self._sex)

子级

class Teacher(Person):
    def_init_(self,name=",age=30,sex=man,department=Computer'): 
        super(Teacher,self). init (nameagesex)
        selfsetDepartment(department) 
        
    def setDepartment(self,department):
        assert isinstance(department,str),'department must be a string. self. 
        department=department 
    
    def show(self):
        super(Teacher,self).show()
        print(Department:,self. department)

其中

 super(Teacher,self). init (nameagesex)

此处可以用

Person.init__(self,name, age, sex) 

替换。

父级存在的对象子级也可以重复命名,相当于把从父级继承过来的对象进行覆盖,这一行为是被允许的。