第8章 Python类的特殊方法

通过调用或重写python内置的方法,可以快捷地实现各种功能

# 从object类继承的方法

获取对象的基本信息

要获取的信息方法名语法信息类型
对象的自我描述repra.repr()字符串
对象的所有方法名、属性名dir直接输出:a.dir()
排序后输出:dir(a)
列表
对象的所有属性名、属性值dicta.dict字典
对象具体属性的值dict[‘key’]a.dict[‘x’]value
class A():
    def __init__(self,x):
        self.x = x
    def b(): pass
a = A(1)

>>> a.__repr__()
'<__main__.A object at 0x0000000002F5E9B0>'
>>> a.__dir__()
['x', '__module__', '__init__', ...]
>>> dir(a)
['__class__', '__delattr__'., ...]
>>> a.__dict__
{'x': 1}
>>> a.__dict__['x']
1

对象的基本操作

操作对象的属性时,python会自动调用相对应的方法。name要用单/双引号括起来

操作自动调用的方法参数
访问getattr / getattributename
赋值——赋新值或新增类成员setattrname, value
删除delattrname
>>> a.x = 2
>>> a.x
2
>>> del a.x
>>> a.x
AttributeError: 'A' object has no attribute 'x'

对象及其成员

方法名作用name
getattr(object, name)获取对象中name属性的值只能是属性
setattr(object, name, value)设置对象中name属性的值可以是属性或方法
hasattr(object, name)检查name是否在object中可以是属性或方法

序列相关方法

key为整数或slice对象

方法名参数作用
len-返回元素个数
getitemkey获取指定索引对应的元素
setitemkey, value设置指定索引对应的元素
delitemkey删除指定索引对应的元素
containsitem判断指定元素是否在序列内

# 取整相关方法

方法名roundtruncfloorceil
作用四舍五入取整截断取整向下取整向上取整

# 运算符相关方法

比较运算符(方法在object中)

==!=>>=<<=
eqnegtgeltle

算术运算符

+-*/**//
addsubmultruedivpowfloordiv
求余运算方法名返回结果
%mod余数
divmoddivmod包含商和余数的元组

位运算符(同时也是算术运算符)

&|^<<>>
andorxorlshiftrshift

单目运算符

为单目求负(-)为单目求正(+)为单目求反(~)
negposinvert

# 类型转换相关方法

方法名bytescomplexintfloat
将对象转换为字节复数整数浮点数

迭代器(iterator)相关方法

列表、元组、字典等可迭代的对象,都属于迭代器

内置方法作用
iter返回一个迭代器
next返回迭代器的下一个元素
reverse为内置的reverse()函数提供支持
>>> a = [1,2,3]
>>> b = a.__iter__()
>>> next(b)
1
>>> next(b)
2

# 生成器(generator)相关方法:yield

yield:把跟随其后的变量变成一个生成器,每次返回一个迭代元素

基础代码

def a():
    for i in range(3):
        yield i
b = a()

用next()获取迭代元素

>>> next(b)
0
>>> next(b)
1

用for循环遍历生成器

>>> for i in b: print(i)

0
1
2

next() + for

如果已经用next()提取了一部分元素,for循环只能提取剩下的元素

>>> next(b)
0
>>> for i in b: print(i)

1
2

生成器的方法

方法作用
send()外部程序向生成器传递数据,由yield接收
第一次只能传入None,next()之后才能传入具体数据
每运行一次send()方法都会运行next()
close()停止生成器,之后不能再用next()
throw()在生成器的yield语句内引发异常
list(b)生成器转列表
tuple(b)生成器转元组
def a():
    for i in range(3):
        out_value = yield i
        print(out_value)
b = a()

>>> next(b)
0
>>> b.send(9)
9
1

更多内置方法

方法作用
del 对象销毁对象(对象的引用次数变为0时),释放内存空间
hasattr(object, name)检查属性或方法是否存在,返回bool值
call调用方法、属性——没有__call__方法的对象是不可调用的
format(format, spec)将对象转换成格式化字符串
abs返回绝对值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ailsa2019

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

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

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

打赏作者

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

抵扣说明:

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

余额充值