面向对象最本质解决的是: 提供可扩展性
类与对象
程序中必须先有类,再有对象
class Person:
school = 'xxxx'
def __init__(self,name='hys',age=16):
self.name=name
self.age=age
p = Person('my')
print(Person.__dict__)
p.school = 'yyyy'
print(p.__dict__)
对象绑定方法: 定义在类内部,没有装饰器装饰的方法,都是对象的绑定方法
需要对象来调用,对象调用的时候,会把自身传入
class Person:
def __init__(slef,name='my'):
self.name=name
self.age=17
def change_name(self,name):
self.name=name
p = Person()
p.change_name('mayue')
对象交互
class Person:
def __init__(slef,name='my'):
self.name=name
self.age=17
def change_name(self,name):
self.name=name.upper()
继承:减少代码冗余
继承查找顺序(新式类,经典类)
广度优先(新式类)和深度优先(经典类)
在子类中调用父类的方法
指名道姓
supper
(类名,对象).父类的方法名( ) supper
严格按照 mro
列表查找
派生
多态和多态性
控制子类必须实现父类的方法: 第一种方式:abc模块. 第二种模式: 通过抛异常
鸭子类型:只要有指定的绑定方法,那就是鸭子( 不用父类强制约束,人为约束 )
封装
组合也属于封装
隐藏属性和方法
用__放在属性和方法前面: 能把属性和方法隐藏
隐藏属性为了安全
隐藏方法为了隔离复杂度
property: 把方法包装成数据属性
修改,删除 @方法名.setter
@方法名.delete
classmethod
: 类的绑定方法
staticmethod
静态方法(非绑定方法)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix