面向对象
类class:属性和方法的集合
对象:类的具象,是一个实体
面向对象三要素:
1、封装:将数据和操作组装到一起(组装),
隐藏数据:对外只暴露一些接口,通过接口访问对象。
2、继承:复用,多继承少修改,OCP(Open-closed Principle)
3、多态:
定义:class MyClass
类的定义就会产生一个类对象,类定义中的变量和方法都是类的属性(保存在类的__dicd__中)
实例化:a = MyClass(),生成了一个类的对象a
实例的初始化 __init__(其内的参数为实例的变量)
实例的变量是每个实例自己的变量,是自己独有的,类的变量是类的实例共享的属性和方法。都保存在各自的__dict__中。
封装:
类方法:
在类定义中,使用@classmethod装饰器修饰,必须至少有一个参数,第一个参数给了cls,cls指代类对象自身
静态方法:
在类定义中,使用@staticmethod装饰器修饰,调用时,不会隐式的传入参数
保护变量:在变量前加_,(开发者之间的约定,解释器没做任何改变)
私有变量:在变量前加__,(解释器将变量名字改了,变成 _类名__变量名)
属性装饰器:
使用@property装饰,后面跟的函数名就是以后的属性名,也是getter。
@property
def age(self):
return self.__age
setter装饰器,可以改属性
@age.setter
def age(self,vaule)
self.__age = vaule
deleter装饰器,可以删除属性,很少用
property必须在前,setter在后
继承:
class Cat(Animal),Cat继承了Animal的属性和方法
继承时,公有的,子类和实例都可以随意访问,私有成员被隐藏,子类和实例不可直接访问,私有变量所在的类内的方法可以访问这个私有变量
如果在子类中写相同的属性或方法,会覆盖父类的方法。
继承中的初始化:
如果父类中定义了__init__方法,应该在子类中调用它(使用 super().__init__(age) 方法)
多继承:
一个类继承了多个类,也就是有多个父类,轻易不要用
Mixin:
一个复杂的类往往需要许多功能,这些功能可能来自不同的类,这就需要有很多的类组合在一起,由Mixin实现
Mixin本质上是多继承实现的,体现的是一种组合的设计模式
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88329