面向对象编程
面向对象编程:使用类和对象实现一类功能。
类与对象
类:类就是一个模板,模板里可以包含多个函数,函数里实现一些功能。
对象:是根据模板创建的实例,通过实例对象可以执行类中的函数。
面向对象应用
根据模板创建一系列例子的时候;当多个函数需要用到共同的参数时(提取公共参数放入构造函数中);应用场景(SSH)
定义类
class 类: def func1(self): def func22(self):
类的特性
封装:将内容封装到某个地方,以后再去调用被封装在某处的内容;对于面向对象的封装来说,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容。类中封装了字段和方法,对象中封装了普通字段的值。
- 防止数据被随意修改;
- 使外部程序不需要关注对象内部的构造,只需要通过此对象对外提供的接口进行直接访问即可。
继承:对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。即通过父类,子类以最小代码量的方式实现不同角色的共同点和不同点的同时存在。
- 如果类中不定义__init__,调用父类super class的init
- 如果类继承父类,同时也需要定义自己的init,就需要在当前类的init调用一下父类的init
- super().__init__(参数)
- super(类名,self).__init__(参数)
- 方法搜索规则:先找当前类,再去找父类
- 重写 override:父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法
- 子类的方法中也可以调用父类的方法:super().方法名(参数)
- 查看搜索顺序:类名.__mro__ 或 import inspect inspect.getmro(类名)
- 父类定义的私有属性,子类获取不到
class Person(object): def __init__(self, name,age): self.name=name self.age=age class BlackPerson(Person): def __init__(self, nation): # 先继承,再重构 self.nation=nation Person.__init__(self,name,age) b = BlackPerson('A',22,'blabla') # Person.__init__(self,name,age) 这里的self相当于b,b.name='A',b.age=22 # 继承方法二:新式类写法 super(BlackPerson, self).__init__(name,age)
实例
class SchoolMember(object): members = 0 #初始学校人数为0 def __init__(self,name,age): self.name = name self.age = age def tell(self): for k,v in self.__dict__: print(k,v) def enroll(self): '''注册''' SchoolMember.members +=1 print("