time 2020-10-16
author Venki
学习过程
- 私有化属性
- 为了更好的保护属性安全,既不能随意修改,将属性定义为私有属性,添加一个可调用的方法去访问。
- 两个下划线开头,声明为私有属性,不能再类的外部被使用或直接访问。
- ①把特定的属性隐藏起来,不想让类的外部直接调用;②保护属性,不能让属性值随意改变;③保护属性,不让派生类继承此属性。
-
私有化方法
-
property属性
-
__new__方法
- __new__是在一个对象实例化的时候所调用的第一个方法
- __new__至少必须要有一个参数cls,代表要实例化的类,此参数在实例化时由python解析器自动提供,其他的参数是用来直接传递给__init__方法
- __new__决定是否使用该__init__方法,因为__new__可以调用其他类的构造方法或者直接返回别的实例对象作为本类的实例,如果__new__没有返回实例对象,则__init__不会被调用
- 在__new__方法中,不能调用自己的__new__方法,即:return cls.new(cls),否则会报错(超过最大递归深度)
- 单例模式
单例模式是常用的软件实际模式,目的确保某一个类只有一个实例存在
- 错误和异常处理
try:
可能出现错误的代码块
except:
出错智慧执行的代码块
else:
没有出错的代码块(当try里面的代码块没有出现异常的情况下,才会执行)
finally:
不管有没有出错都执行的代码块
- except在捕获类型的时候,是根据具体类型进行捕获的
- 错误类型:Exception是通用的异常类型
# 具体具有什么异常类型,不必强制记住,可以百度即可
- 自定义异常类
-
python动态添加属性和方法
-
__slots__属性
- python是动态语言,在运行的时候可以动态添加属性。如果要限制在运行的时候给类添加属性,python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性
- 只有在__slots__变量中的属性才能被添加,没有在__slots__变量中的属性会添加失败。可以防止其他人在调用类的时候胡乱添加属性或者方法。__slots__属性子类不会继承,只有在当前类中有效。
- 子类如果声明__slots__,那么会继承父类原有的属性并遵循
学习过程中的疑问
碎知识点
- 私有属性不能被继承
- 定义变量__slots__后,__dict__魔术变量即不生效
- python中的new方法:用来创建实例对象时,只有继承object的话才能有这个方法
- 单例模式-应用举例:日志功能,网站计数器,权限验证模块,Windows的资源管理器,系统的回收站,数据库连接池等
重新理解
-
动态语言:运行是可以改变其结构,例如:新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或事其他结构上的变化。如:PHP、JavaScript、python都是动态语言,C、C#、Java都是静态语言
- 动态类型语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。
-
静态语言:静态类型语言是在运行前编译时检查类型。在写代码时,没声明一个变量必须指定类型
- 静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。
-
所以python可以在程序运行过程中添加附加属性和方法