课堂笔记22-11-30(Python脚本语言开发)
Python脚本语言开发
面向对象
属性
- 成员属性
- 事物具有的特征,通常表现为静态的数据,包括类属性和实例属性
- 类属性
- 某个类的所有实例化对象所共有的属性,定义在类内部、方法外部
- 通过类名或对象名均可访问。如果是通过对象名访问,程序会先看有无同名的实例属性,如果没有,则引用类属性。
- 类属性的更新,只能通过类名引用重新赋值。
- 实例属性
- 实例对象自己的属性,即实例属性属于特定的实例。
注意:
- 在Python中,通过在类的外部使用赋值语句:“对象名.属性名=值”即可添加实例属性,但是不推荐使用!所有的实例属性应该尽量封装在类的内部。
- 在类的外部给对象增加属性,该语句的位置会影响代码的正常运行,需在调用类方法之前设置属性,否则会报错。
- 实例属性应该在类的内部用初始化方法“init”封装。Python在使用类创建对象时,__init__方法会自动被调用。
方法
构造方法
- init(self, ……) 是Python中的一种特殊方法,固定格式,用于初始化实例的属性,通常是类定义中的第一个成员方法。
析构方法
- del(self)是Python中的另一种特殊方法,固定格式,当删除一个对象来释放类所占用的资源时,系统会自动调用析构方法
实例方法
实例方法的定义格式与函数大致相同,主要区别在于实例方法必须显式地以实例对象作为第一个参数,习惯上用self表示。
def <方法名>(self, <参数列表>):
<方法体>
当某个实例对象调用方法时,Python解释器会自动把这个对象隐式地传给self,开发者只需传递后面的参数。在类定义之外,实例方法只能通过实例对象去调用
<对象名>.<方法名>(<参数列表>)
类方法
类方法用装饰器@classmethod来标识,且必须显式地以类对象作为第一个参数,习惯上用cls表示。
@classmethod
def <类方法名>(cls, <参数列表>):
<方法体>
在类方法内部可以直接访问类属性或者调用其它类方法。类方法不对特定实例进行操作,如果在类方法中访问实例属性,会导致错误。
静态方法
静态方法需要使用装饰器@staticmethod来标识。
静态方法没有必须存在的参数要求。
调用静态方法既可以通过类对象,也可以通过实例对象,
可视具体情况而定,即:调用静态方法不需要实例化。
@staticmethod
def <静态方法名>():
<方法体>
不同种类方法的对比
- 定义形式上
- 类方法和静态方法需要用装饰器标识,而实例方法不需要;
- 实例方法必须有self参数,类方法必须有cls参数,而静态方法不需要。
- 调用方式上
- 实例方法通过实例对象调用,不能通过类对象直接调用;
- 类方法和静态方法可以通过类对象或者实例对象调用,建议通过类对象调用
- 应用场景上
- 实例方法针对实例对象进行操作,应用场合最多;
- 类方法针对类对象进行操作,使用时无需创建实例对象;
- 实例方法和类方法可以改变实例对象或类对象的状态,而静态方法不可以;类方法中不能访问实例属性。
- 如果要修改实例属性的值,就使用实例方法;如果要修改类属性的值,就使用类方法;如果是辅助功能,如打印菜单或用于测试等,可考虑静态方法,此时可以在无实例化的前提下使用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ming OR Fang KINESPHERE!
评论










