面向对象(总结)

面向对象最本质解决的是: 提供可扩展性

类与对象

程序中必须先有类,再有对象

# 类中有属性,有方法
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')
# 本质就是
# Person.change_name(p,'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静态方法(非绑定方法)

posted @   hanyingshuo  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示