Python魔法属性
- 一、\__doc__
- 二、\__module__ 和 \__class__
- 三、\__init__
- 四、\__del__
- 五、\__call__
- 六、\__str__
- 七、\ __dict__
- 八 、\__getitem__与__setitem__与__delitem__
- 九、\__getslice__与__setslice__与__delslice__
一、_doc_
表示类的描述信息
class Test(object):
""" 描述类信息 """
def func(self):
pass
print(Test.__doc__)
二、_module_ 和 _class_
__module__用来表示当前正在操作哪个模块
__class__用来表示当前正在操作对象的类
test1.py:
class Test(object):
def __init__(self):
self.name = '123'
test2.py:
from test1 import Test
obj = Test()
print(obj.__module__) # 输出 test1
print(obj.__class__) # 输出 test.Test
三、_init_
初始化方法,创建对象时自动调用
class Test(object):
def __init__(self):
self.name = '123'
obj = Test() # 自动执行类中的 __init__ 方法
四、_del_
当对象在内存被释放的时候会自动调用。Python解释器会自动执行,无需调用。
class Foo:
def __del__(self):
print("deleted")
五、_call_
在对象的后面加(),执行__call__里的代码。
注:__init__是实例化对象的时候用的,它的()作用于类,而__call__则作用于实例化后的对象
class Fun:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('called')
obj = Fun() # __init__
obj() # __call__
六、_str_
print(对象)时执行__str__内的程序
class Fun:
def __str__(self):
return '123'
obj = Fun()
print(obj)
# 123
七、\ dict
展示类或对象中的所有属性。注:类属性只存在类对象中,而实例对象存的其实都是实例化后的实例属性。所有的实例对象共用类对象里的类属性和方法。
class Test(object):
def __init__(self, num):
self.num = num
test = Test(1)
print(test.__dict__)
# {'num': 1}
八 、_getitem__与__setitem__与__delitem_
执行如字典一样的操作。用于索引操作,分别是获取,设置和删除操作。
class Fun(object):
def __init__(self):
pass
def __getitem__(self, key):
return "value"
def __setitem__(self, key, value):
print("setting....")
def __delitem__(self, key):
print("del....")
fun = Fun()
print(fun["key"]) # value
fun["key"] = 123 # setting....
del fun["key"] # del....
九、_getslice__与__setslice__与__delslice_
使得对象有切片操作
class Fun(object):
def __init__(self):
pass
def __getslice__(self, i, j):
print('getslice', i, j)
def __setslice__(self, i, j, sequence):
print("setslice", i, j, sequence)
def __delslice__(self, i, j):
print("delslice", i, j)
fun = Fun()
fun[1:4] # getslice 1 4
fun[1:4] = 123 # setslice 1 4 123
def fun[1:4] # delslice 1 4