本文主要是介绍第8章 Python类的特殊方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
通过调用或重写python内置的方法,可以快捷地实现各种功能
# 从object类继承的方法
获取对象的基本信息
要获取的信息 | 方法名 | 语法 | 信息类型 |
---|
对象的自我描述 | repr | a.repr() | 字符串 |
对象的所有方法名、属性名 | dir | 直接输出:a.dir() 排序后输出:dir(a) | 列表 |
对象的所有属性名、属性值 | dict | a.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 / getattribute | name |
赋值——赋新值或新增类成员 | setattr | name, value |
删除 | delattr | name |
>>> 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 | - | 返回元素个数 |
getitem | key | 获取指定索引对应的元素 |
setitem | key, value | 设置指定索引对应的元素 |
delitem | key | 删除指定索引对应的元素 |
contains | item | 判断指定元素是否在序列内 |
# 取整相关方法
方法名 | round | trunc | floor | ceil |
---|
作用 | 四舍五入取整 | 截断取整 | 向下取整 | 向上取整 |
# 运算符相关方法
比较运算符(方法在object中)
算术运算符
+ | - | * | / | ** | // |
---|
add | sub | mul | truediv | pow | floordiv |
求余运算 | 方法名 | 返回结果 |
---|
% | mod | 余数 |
divmod | divmod | 包含商和余数的元组 |
位运算符(同时也是算术运算符)
& | | | ^ | << | >> |
---|
and | or | xor | lshift | rshift |
单目运算符
为单目求负(-) | 为单目求正(+) | 为单目求反(~) |
---|
neg | pos | invert |
# 类型转换相关方法
方法名 | bytes | complex | int | float |
---|
将对象转换为 | 字节 | 复数 | 整数 | 浮点数 |
迭代器(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 | 返回绝对值 |
这篇关于第8章 Python类的特殊方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!