• 【Python】特殊方法、属性和运算符重载(22)


    特殊方法

    可以理解为Python为类自动创建的方法,它们都具有特殊的意义,常用的特殊方法有:

    __init__

    构造方法

    对象创建:p = Person()

    __del__

    析构方法

    对象回收

    __repr__,__str__

    打印,转换 

    print(a)

    __call__

    函数调用

    a()

    __getattr__

    点号运算

    a.xxx

    __setattr__

    属性赋值

    a.xxx = value

    __getitem__

    索引运算

    a[key]

    __setitem__

    索引赋值

    a[key]=value

    __len__

    长度

    len(a)

    除了特定的方法,Python还对运算符方法进行了定义:

    运算符+

    __add__

    加法

    运算符-

    __sub__

    减法

    <,<=,==

    __lt__,__le__,__eq__

    比较运算符

    >,>=,!=

    __gt__,__ge__,__ne__

    |,^,&

    __or__,__xor__,__and__

    或、异或、与

    <<,>>

    __lshift__,__rshift__

    左移、右移

    *,/,%,//

    __mul__,__truediv__,__mod__,__floordiv__

    乘、浮点除、模运算(取余)、整数除

    **

    __pow__

    指数运算

     改写以上的方法,实际就是对运算符进行了重载:

    1. class Complex:
    2. def __init__(self,real,img):
    3. self.real = real
    4. self.img=img
    5. def __add__(self, other):
    6. if isinstance(other,Complex):
    7. return Complex(self.real + other.real,self.img + other.img)
    8. c1=Complex(1.2,5.3)
    9. c2=Complex(2.0,0.3)
    10. x=c1+c2
    11. print(x.real,x.img) #输出 3.2 5.6

    加法运算的结果需要返回一个Complex对象,所以需要return 

    特殊属性

    Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。

    特殊方法

    含义

    obj.__dict__

    对象的属性字典

    obj.__class__

    对象所属的类

    class.__bases__

    类的基类元组(多继承)

    class.__base__

    类的基类

    class.__mro__

    类层次结构

    class.__subclasses__()

    子类列表

     

     

     

     

     

     

     

     

    单例模式

    单例模式是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。 一般可以通过__new__()的方法来实现:

    1. class MySingleton:
    2. __obj = None
    3. __flag = False
    4. def __new__(cls, *args, **kwargs):
    5. if cls.__obj == None:
    6. cls.__obj = object.__new__(cls)
    7. return cls.__obj
    8. def __init__(self, name):
    9. if not MySingleton.__flag:
    10. self.name = name
    11. MySingleton.__flag = True
    12. a = MySingleton("aa")
    13. print(a)
    14. b = MySingleton("bb")
    15. print(b)

    通过 __obj  判断是否存在对象,来实现内存的分配,通过   __flag 判断对象是否调用构造函数类实现变量的初始化(name)

    输出结果:

    <__main__.MySingleton object at 0x019862F0>
    <__main__.MySingleton object at 0x019862F0>

    可见 ,a和b实质是同一个对象。

  • 相关阅读:
    Web1.0——Web2.0时代——Web3.0
    第5 章 项目集管理 第6 章 项目组合管理
    分成两栏后文字顺序混乱的问题解决【写期刊论文时】
    Linux find学习
    Python中的增强现实(AR)技术和应用
    java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署
    【C++20】模块
    32位单片机PY32F040,主频72M,外设丰富,支持断码LCD
    【Java 进阶篇】JavaScript DOM Element 对象详解
    UVA 1152 和为 0 的 4 个值 4 Values whose Sum is 0
  • 原文地址:https://blog.csdn.net/yixiaobo2001/article/details/127554106