目录
[一 类属性 VS 实例属性](#一 类属性 VS 实例属性)
[二 实例方法、类方法、静态方法](#二 实例方法、类方法、静态方法)
一 类属性 VS 实例属性
| 类属性 | 实例属性 | |
|---|---|---|
| 位置 | 类内部, 方法外部 | **init**或其他方法内部 |
| 共享性 | 所有实例共享 | 每个实例独有 |
| 访问方式 | 类名.属性名 or 实例.属性名 | 实例.属性名 |
python
class Software:
#类属性
VERSION = '1.0'
LANGUAGE = 'Chinese'
def __init__(self,name):
#实例属性
self.name = name
class App(Software):
pass
software = Software('好学英语软件')
#修改类属性可以影响所有实例
Software.VERSION='2.0'
print(software.name)
print(software.VERSION)
app = App('好学app')
#子类可以继承父类的类属性和实例属性
print(app.name)
print(app.VERSION)

二 实例方法、类方法、静态方法
类方法和静态方法是两种特殊的方法类型, 与普通的实例方法有所不同
| 方法 | 实例方法 | 类方法 | 静态方法 |
|---|---|---|---|
| 介绍 | 操作实例状态的方法 | 操作类状态的方法 | 与类和实例都无关的工具方法 |
| 使用场景 | 需要访问对象时 | 需要访问类的时候 | 不需要访问对象和类时 |
| 装饰器 | 无 | @classmethod | @staticmethod |
| 第一个参数 | self(实例本身) | cls(类本身) | 无特殊参数 |
| 访问权限 | 可访问实例属性和类属性 | 只能访问类属性 | 实例属性和类属性都不能访问 |
python
class Banji:
teacher = '张老师'
#构造方法
def __init__(self,class_name):
self.class_name = class_name
#实例方法:可访问实例属性和类属性
def instance_method(self,student_numbers):
print(self.teacher+'的班级'+self.class_name+f'有{student_numbers}名学生')
return self.class_name + f'{student_numbers}'
#类方法:只能访问类属性
@classmethod
def get_teacher(cls):
print(cls.teacher)
#静态方法:实例属性和类属性都不能访问
@staticmethod
def meeting():
print('班级开会了')
banji = Banji('三年四班')
banji.instance_method(40)
banji.get_teacher()
banji.meeting()
