一、核心结论先记这 3 句Python 是动态语言类和对象创建后随时可以加属性、加方法。给实例加的属性 / 方法只属于这个实例别的实例没有。给类加的属性 / 方法所有实例共享都能调用。二、动态添加 属性1. 给 某个实例 加属性python运行class Student: pass # 创建实例 s1 Student() s2 Student() # 只给 s1 动态加属性 s1.name 小明 s1.age 20 print(s1.name) # 小明 print(s2.name) # 报错s2 没有 name2. 给 类 加属性所有实例共享python运行class Student: pass # 给类加属性 Student.school 第一中学 s1 Student() s2 Student() print(s1.school) # 第一中学 print(s2.school) # 第一中学三、动态添加 方法重点方法分 3 种实例方法类方法 classmethod静态方法 staticmethod1. 动态添加 实例方法必须用types.MethodType包装python运行import types class Student: pass # 定义一个外部函数 def run(self): print(正在跑) # 创建实例 s Student() # 动态给实例添加方法 s.run types.MethodType(run, s) # 调用 s.run() # 成功2. 动态添加 类方法直接把函数用 classmethod 装饰后赋值给类即可python运行class Student: pass # 外部函数 classmethod def study(cls): print(学习中) # 动态添加给类 Student.study study # 调用 Student.study() # 类调用 s Student() s.study() # 实例调用3. 动态添加 静态方法python运行class Student: pass # 外部函数 staticmethod def sleep(): print(睡觉) # 动态添加给类 Student.sleep sleep # 调用 Student.sleep() s Student() s.sleep()四、你最关心的重点解开你上一个问题为什么不能直接把外部函数赋值给类因为直接赋值 普通函数不会自动传 self /cls不是真正的实例 / 类 / 静态方法❌ 错误写法python运行def info(cls): print(cls) class Student: pass Student.info info # 直接赋值 普通函数 Student.info() # 报错没传 cls✅ 正确写法必须包装python运行classmethod def info(cls): print(cls) Student.info info或者python运行Student.info classmethod(info)五、一句话总结最精髓给实例加只属于自己用types.MethodType给类加所有实例共享实例方法需要MethodType类方法需要classmethod或classmethod()静态方法需要staticmethod或staticmethod()