【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__

指数运算

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

class Complex:
    def __init__(self,real,img):
        self.real = real
        self.img=img
    def __add__(self, other):
        if isinstance(other,Complex):
          return Complex(self.real + other.real,self.img + other.img)
c1=Complex(1.2,5.3)
c2=Complex(2.0,0.3)
x=c1+c2
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__()的方法来实现:

class MySingleton:
    __obj = None
    __flag = False
    def __new__(cls, *args, **kwargs):
        if cls.__obj == None:
            cls.__obj = object.__new__(cls)
        return cls.__obj
    def __init__(self, name):
      if not MySingleton.__flag:
        self.name = name
        MySingleton.__flag = True
a = MySingleton("aa")
print(a)
b = MySingleton("bb")
print(b)

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

输出结果:

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值