一.封装
类似于模板,把事物共有的特征和行为进行打包,然后创建出来的对象就会具有这些特征和行为。
1.封装数据的主要原因是:保护隐私 和 隔离复杂度
2.类的结构
class 类名(object): #类名的命名规则:大驼峰命名法(每个单词首字母大写,单词之间没有下划线)
#类属性
属性名 = 值
#类方法
@classmethod #声明下面的方法属于类方法
def 方法名(cls):
pass
#静态方法
@staticmethod #声明下面的方法属于静态方法
def 方法名(): #静态方法不需要参数传递,所以只有一个括号()
pass
# 实例属性
def __init__(self): # 初始化
pass
# 实例方法
def 实例方法名(self):
pass
# 实例方法(__call__)
def __call__(self):
pass
#调用类属性、类方法和静态方法
类名.属性名()
类名.方法名()
类名.静态方法名()
#调用实例属性和方法
#首先创建实例(创建对象)
对象名 = 类名() #括号中传递实参
对象名.属性名()
对象名.方法名() #括号中传递实参
对象名() #可以直接调用call方法,括号中传递实参
二.继承
1.单继承:继承一个父类
class A(object):
pass
class B(A):
pass
重写(Overside):子类继承父类,父类中的方法不能满足子类要求时,对父类中的方法进行重写。(方法名相同,才叫重写)
super():对父类中的方法进行重写后,要是还想调用,此时就用super
2.私有属性和私有方法
就是在想要私有的属性和方法前面加__,这样外部就访问不到了。要想访问就必须提供对外的访问接口。
注意:
前后两个下划线:内置方法
前面一个下划线:from 模块名 import * 导包的时候防止导入
3.多继承:继承多个父类
class A(object):
pass
class B(object):
pass
class C(A,B): #多个类之间用逗号分隔
pass
注意事项:
搜索顺序:先自身,后从左往右,最后基类(object)
三、多态
不同的 子类对象 调用相同的 父类方法,产生不同的执行结果.
可以 增加代码的灵活度.
以 继承 和 重写父类方法 为前提.
是调用方法的技巧,不会影响到类的内部设计.