• python — 面向对象【1】


    面向对象

    什么是面向对象

    以前的编程我们把它称为“面向过程的编程”

    重点在于:做什么

    现在的编程我们把它称为“面向对象的编程”(oop)

    重点在于:谁去做

    用来描述具有相同属性或者方法的对象的集合

    属性:对象的描述形象

    方法:对象的行为

    类的特性是:封装、继承、多态

    封装

    • 在类中对数据的赋值、内部调用对外部用户是透明的

    • 把一些功能的实现细节不对外暴露

    继承

    • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。

    • 为实现代码的重用, 一个类可以派生出子类

    • 继承也允许把一个派生类的对象作为一个基类对象对待。

    多态

    • 接口重用

    • 一个接口,多种实现(重写)

    对象(实例)

    具体的某个事物,实实在在的一个例子

    实例化:创建一个类的实例

    面向对象的优点

    • 迭代更新方便

    • 结构清晰、易于管理

    1. class ATM():
    2.    #属性
    3.    money = 50000
    4.    country = "China"
    5.    bank = "gonghang"
    6.    #方法
    7.    def get_money(self,money):
    8.        print(f"get money:{money}")
    9. #实例化:创建一个类的实例
    10. a1 = ATM()
    11. a2 = ATM()
    12. print(dir(a1))
    13. #属性访问
    14. print(a1.money,a2.country)
    15. a1.get_money(500)

    类的定义和使用

    命令规范

    一般首字母大写(大驼峰式命令)例如:Person,GoodsInfo

    定义关键字:class

    python2 ==》经典类,新式类

    python3 ==》 新式类

    python2显示object的类是新式类,没有就是经典类(python3默认是新式)

    1. class A:
    2.    pass
    3. class B():
    4.    pass
    5. class C(object):
    6.    pass

    类空间和实例空间

    1. class ATM():
    2.    #属性
    3.    money = 50000
    4.    country = "China"
    5.    bank = "gonghang"
    6.    #方法
    7.    def get_money(self,money):
    8.        print(f"get money:{money}")
    9. #实例化:创建一个类的实例
    10. a1 = ATM()
    11. a2 = ATM()
    12. print(dir(a1))
    13. #属性访问
    14. print("实例访问".center(20,"*"))
    15. print(a1.money,a2.country)
    16. a1.get_money(500)
    17. print("类访问".center(20,"*"))
    18. print(ATM.money)
    19. print("="*30)
    20. a1.area = "hunan"
    21. print(a1.area)
    22. # print(a2.area)   #没有,上面只是a1添加了,但是ATM没有添加,所以a2没有,指针可以引用类空间,但是不能改变
    23. ATM.color = "blue"    #ATM 添加了color所以a1和a2都会有
    24. print(a1.color,a2.color)
    25. #类空间 和 实例空间
    26. print("类空间".center(30,"*"))
    27. print(ATM.__dict__)
    28. print("a1的空间".center(30,"*"))
    29. print(a1.__dict__)
    30. print("a2的空间".center(30,"*"))
    31. print(a2.__dict__)
    32. a1.money = 20000
    33. print(a1.money,a2.money)
    34. #实例只能引用类,不能改变类

    类创建的时候会生成类空间

    实例化对象生成实例空间,不同的实例之间,空间都是独立的

    实例查找属性方法的时候,会先在实例空间查找,找不到就去类空间查找

    类空间找不到,就去父类空间找

    实例空间会有一个父对象指针,通过这个指针实例就可以访问类的属性方法了

     

    __init__方法

    实例对象的构造方法(初始化方法)

    实例化对象的时候自动调用__init__方法

    1. class ATM():
    2.    #属性
    3.    money = 50000
    4.    country = "China"
    5.    bank = "gonghang"
    6.    def __init__(self,area):
    7.        #实例属性
    8.        self.area = area
    9.    #方法
    10.    def get_money(self,money):
    11.        print(f"get money:{money}")
    12. #实例化
    13. atm1 = ATM("hunan")
    14. atm2 = ATM("hubei")
    15. print(atm1.area,atm2.area)

    __new__方法

    创建实例的方法 ,一般情况下不需要重写

    总结

    __new__是创建实例的方法 __init__是创建好的实例进行初始化的方法

    __new__方法必须要传入一个参数(cls),代表当前类 __new__必须返回一个实例对象 __init__的self就表示__new__返回的实例,__init__在对这个实例进行初始化工作 子类没有定义__new__,就会找父类的__new__ 新式类才有__new__ 如果实例化对象和本身class不一致,__init__不会执行 __new__方法属于静态方法 __init__方法属于实例方法

    单例模式

    无论是实例化多少次,都返回同一个对象实例

  • 相关阅读:
    【以太网硬件十七】什么!?网线边传数据还能边供电?
    电容笔和触屏笔一样吗?Ipad高性价比电容笔排行
    前端面试题目(二十四)
    浅析 ArrayList
    智能合约学习资料
    表达式语言的新趋势!了解SPEL如何改变开发方式
    C++笔记之临时变量与临时对象与匿名对象
    嵌入式5. ARM指令集详解
    【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 4
    Sharding-JDBC源码解析与vivo的定制开发
  • 原文地址:https://blog.csdn.net/a1991376352/article/details/125902977