python 内置函数和特殊方法关系_Python 杂记:特殊方法(Special Methods)

特殊方法简介

方法

描述

__init__()

构造函数

__len__()

重载len(),例如:len(obj)

__getitem__()

重载[](读操作),例如:obj[0]

__setitem__()

重载[](写操作),例如:obj[0] = 123

__str__()

重载 str(),例如:str(obj)

__repr__()

重载 repr(),例如:repr(obj),遇到字符串格式化 %r 时会调用它

__abs__()

重载 abs(),例如:abs(obj)

__bool__()

重载 bool(),例如:bool(obj)

__add__()

重载加法操作符+,例如:obj1 + obj2

__mul__()

重载乘法操作符*,例如:obj1 * 123

...

...

更多的特殊方法请参考本文末尾“特殊方法列表”。

特殊方法示例

__init__()

class Foo:

def __init__(self):

print("Foo::__init__() is called")

foo = Foo() # Foo::__init__() is called

__len__()、__getitem__()、__setitem__()

class Foo:

def __init__(self):

self.data = []

def __len__(self):

print("Foo::__len__() is called")

return len(self.data)

def __getitem__(self, index):

print("Foo::__getitem__(%d) is called" % index)

return self.data[index]

def __setitem__(self, index, value):

print("Foo::__setitem__(%d,%r) is called" % (index, value))

if len(self.data) > index:

self.data[index] = value

else:

self.data.append(value)

foo = Foo()

foo[0] = 123 # Foo::__setitem__(0,123) is called

foo[1] = "abcd" # Foo::__setitem__(1,'abcd') is called

print(len(foo)) # Foo::__len__() is called\n2

foo[0] # Foo::__getitem__(0) is called

__str__()、__repr__()

__str__() 与 __repr__() 类似,都是将对象转换为字符串,区别:

__str__() 倾向于返回可读性更高的字符串(readable, pretty print);

__repr__() 倾向于返回准确、无歧义的字符串(unambiguous),例如:"%r, %r" % (123, "123") 结果是"123, '123'",同样都是123,前者是数字,后者是字符串,必须准确表达;

当 __str__() 没有被定义但是定义了 __repr__() 时,__repr__() 会被 str() 借用,反过来则不会。

示例:

class A:

pass

a = A() # 当 __repr__() 和 __str__() 都没有定义,使用默认输出

print(str(a)) # <__main__.a instance at>

print(repr(a)) # <__main__.a instance at>

print("%r" % a) # <__main__.a instance at>

class B:

def __repr__(self):

return "B::__repr__"

b = B() # 当定义了 __repr__() 但没有定义 __str__()

print(str(b)) # B::__repr__ # str() 会调用 __repr__()

print(repr(b)) # B::__repr__

print("%r" % b) # B::__repr__

class C:

def __str__(self):

return "C::__str__"

c = C() # 当定义了 __str__() 但没有定义 __repr__(),repr()不会调用 __str__()

print(str(c)) # C::__str__

print(repr(c)) # <__main__.c instance at>

print("%r" % c) # <__main__.c instance at>

class D:

def __repr__(self):

return "D::__repr__"

def __str__(self):

return "D::__str__"

d = D() # # 当 __repr__() 和 __str__() 都有定义,各自使用各自的

print(str(d)) # D::__str__

print(repr(d)) # D::__repr__

print("%r" % d) # D::__repr__

特殊方法列表

注:本小节中表格数据来自于《流畅的Python》。

跟运算符无关的特殊方法

类别

方法名

字符串 / 字节序列表示形式

__repr__、__str__、__format__、__bytes__

数值转换

__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__

集合模拟

__len__、__getitem__、__setitem__、__delitem__、__contains__

迭代枚举

__iter__、__reversed__、__next__

可调用模拟

__call__

上下文管理

__enter__、__exit__

实例创建和销毁

__new__、__init__、__del__

属性管理

__getattr__、__getattribute__、__setattr__、__delattr__、__dir__

属性描述符

__get__、__set__、__delete__

跟类相关的服务

__prepare__、__instancecheck__、__subclasscheck__

跟运算符相关的特殊方法

类别

方法名和对应的运算符

一元运算符

__neg__ -、__pos__ +、__abs__ abs()

比较运算符

__lt__ 、__ge__ >=

比较运算符

__lt__ 、__ge__ >=

算术运算符

__add__ +、__sub__ -、__mul__ *、__truediv__ /、__floordiv__ //、__mod__ %、__divmod__ divmod()、__pow__ ** 或pow()、__round__ round()

反向算术运算符

__radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、__rdivmod__、__rpow__

增量赋值算术运算符

__iadd__、__isub__、__imul__、__itruediv__、__ifloordiv__、__imod__、__ipow__

位运算符

__invert__ ~、__lshift__ <>、__and__ &、__or__ |、__xor__ ^

反向位运算符

__rlshift__、__rrshift__、__rand__、__rxor__、__ror__

增量赋值位运算符

__ilshift__、__irshift__、__iand__、__ixor__、__ior__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值