模块
模块最大的好处就是提高了代码的可维护性,避免函数名和包名的冲突,
使用和安装第三方模块
先import导入,第三方模块,就能用到数据此模块当中的函数和属性
面向对象编程
Object Oriented Programming 简称OOP,是一种程序设计思想,OOP把对象作为程序的基本单元,一个对象包含函数和操作函数的方法;
类和实例
面向对象最重要的概念类(class)和实例(instance)
|
|
init 前后有两个下划线,第一个参数始终是self,
访问限制
Class内部有属性和方法,外部可以直接用实例来操作类的属性和方法,隐藏了内部复杂的逻辑,
如果不想让内部属性被外部访问,可以把属性名称前面加上两个下划线__,这样内部属性就变成了私有变量,外部不可访问;
|
|
如果需要对属性变量进行更改或取值,可以给类添加get和set方法,通过,get_name,set_sorce,进行修改;
|
|
其次, __XXX__ 类似这样前后带有双下划线的变量,不是私有变量,可以随意访问. _XXX 带有一个下划线的变量,视为私有变量,不要轻易访问;
带有双下划线的私有变量一定要从外部访问嘛?
不一定,带有双下划线的私有变量,Python解释器,其实把, __name 变量给成了_Student__name, 所以,还是可以通过,_Student__name 的形式进行访问;
但是,强烈建议不要这么做.因为不同版本的Python解释器可能会把 __name 改成不同的变量;
继承和多态
继承最大的好处就是,子类可以拥有父类的全部方法和功能
|
|
|
|
|
|
Animal就是Dog,Cat的父类,Dog,Cat就是Animal的子类,并拥有父类的全部方法
子类和父类中拥有相同run()方法,说明子类run()方法覆盖了父类run()的方法,代码运行时候就会调用
子类的run()方法,这就是继承的另一个好处:多态
当然也可以添加父类没有的方法
判断一个变量是否是某个类型可以用isinstance()判断:
|
|
继承关系树:
静态语言 vs 动态语言
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者
它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一
个run()方法就可以了:
获取对象信息
想要知道该对象是什么类型的
type()方法
|
|
type返回的是对应的Class类型.
比较两个变量的type类型是否相同:
instance()方法
先创建变量类型:
|
|
判断:
|
|
dir()方法
想要或去一个对象的所有属性和方法,可以使用dir()方法,返回的是一个包含字符串的list,如:
|
|
|
|
还可以配合,getattr(),setattr()和hasattr()方法来操作属性和方法,如:
|
|
然后,测试是否含有属性:
|
|
如果试图获取不存在的属性,会报错:AttributeError的错误
实例属性和类属性
在编写实例属性和类属性的话,尽量不要使用相同的名字,相同名称的实例属性会覆盖掉类属性,如果
删除掉实例属性的话,再用相同名称,访问到的是类属性.