微信公众号:数据分析与统计学习
如有问题或建议,请公众号留言
最近更新时间:2018-6-29
一、前言
Python的系列文章主要介绍python语言的基础语法知识。按照核心内建数据类型、语句、函数、类、异常、标准模块的顺序对相关的语法知识进行讲解。
上期小编介绍了函数的高级特性,本期小编介绍面向对象编程的基础知识——类。
python类知识的介绍主要分为两块:第一部分讲解类的基础知识,类的定义、类与实例、如何创建一个类;第二部分详细介绍类的运算符重载,类装饰器。
二、为什么使用类
类是面对对象编程的主要工具,通过使用类来进行程序设计可以分解代码、把代码的冗余度降至最低,并且通过定制现有的代码来编写新的程序,而不是在原处进行修改,即最大程度复用代码 。具体来讲上述有点体现在以下三个方面:
1、支持属性继承:继承父类的属性并且可以重新定义属性从而对类进行扩展和补充;
2、支持多重实例:每次调用一个类,就会产生一个新的对象,新的对象都可以调用类的属性;
3、支持运算符重载:类可以通过特定的协议(方法)支持所定义的对象来响应在核心内建数据上的几种运算。
三、类的定义语句
1class Person[(object)]:
2 pass
定义语句class,类名Person大写开头,object需要继承的类,可选
四、类和实例
类:类对象来自于class语句地执行,类是产生实例的工厂,每一次调用产生新的实例。类的属性提供了行为(数据和函数,数据保存状态信息,函数提供方法),所有从类产生的实例都具有该类的属性。
类的特点:
1、class语句创建类对象并将其赋值给变量名。与def语句类似
2、class语句执行时,class语句内的所有语句都会执行,赋值语句会创建类的属性,def定义的函数会创建类的方法
3、类属性提供对象的状态信息,类的方法提供行为
实例:实例来自于类的调用。实例的属性记录数据,每个特定对象的数据都不同。
实例的特性:
1、像函数那样调用类对象会创建新的实例对象,每次调用都会产生新的实例对象。
2、调用类产生实例从而每个实例对象继承类的属性并获得自己的命名空间(def 语句也看做赋值运算)。
3、在方法内对self属性做赋值运算会产生每个实例自己的属性。在类方法函数内,第一个参数(self)会自动引用隐含的实例对象。对self的属性做赋值运算,会创建或修改实例内的变量,而不是类的数据(相当于复制了类的属性和方法而不是引用)
注意事项:
类属性(状态和行为)通常是class语句中通过赋值语句添加在类中,而不是嵌入在函数def语句内(def语句看做赋值运算)。
实例属性通常是在类内,对传给函数的特殊参数self做赋值运算而添加在实例中。
简单的说,实例属性是由对方法内self属性进行赋值运算而生成的,类属性是通过class语句内的赋值语句而生成的。
五、类的继承
除了作为工厂来生成众多的实例对象之外,类还可以通过被继承产生新的子类,子类可以重新定义或者取代超类的属性从而对超类进行修改、补充和扩展。
实例从类中继承属性,而类从超类中继承属性。属性继承的核心观点如下。
1、超类列在类开头的括号中
2、类从其超类中继承属性
3、实例会继承所有可读取类的属性
4、每个object.attr都会开启新的独立搜索,从下至上(先实例、后类,最后超类),从左至右(拥有多个超类时)
5、逻辑的修改是通过创建子类,而不是修改父类。子类可以重新定义超类的变量名,子类也就可以取代并定制所继承的行为。这种动作被称为重载。
六、重载运算符
通过提供专门的命名的方法函数,类可以中断和实现内建操作。例如加法、切片、打印和点号运算等。当实例出现在表达式和其他环境中时,Python自动调用一个类的重载方法,并且该类的方法的返回值变成了相应操作的结果。。例如一个类定义一个命名为、__getitem__方法,X是该类实例,那么表达式X[i]等同于该方法调用X. __getitem__[i]。
特点:
1、以双下划线命名的方法(__X__)是特殊的钩子
2、当实例出现在内置运算时,这类方法会自动调用
3、类可覆盖多数内置类型运算
4、运算符重载方法没有默认值,而且不需要
5、运算符重载可让类对象与Python的对象模型相集成。
七、创建一个类的步骤
1、创建实例,编写构造函数__init__,用于初始化新实例,赋值给实例属性,保存状态信息
2、添加行为方法,通过编写方法函数处理Python中的核心数据类型等对象。
3、添加运算符重载方法,进一步提升处理对象的能力
4、通过子类定制行为。编写子类继承父类重新定义子类的方法和属性从而达到使得子类特殊化
5、定制构造函数,为超类步骤添加初始化逻辑(赋值)。
6、使用内省工具
7、把类对象存储到数据中,用到Pickle和Shelve标准库。
八、后记
写到这里,本期内容讲解完了,不知道读者的你有什么不明白的地方,欢迎各位留言反馈。小编尽最大的努力让各位理解我所介绍的内容。。
下期,小编继续介绍python的类。敬请期待。。。。。。
下面的是我的公众号二维码图片,欢迎关注我。
![](https://i-blog.csdnimg.cn/blog_migrate/0062a465fc0ba53c48445b536ca7e5e5.jpeg)