天天看点

Python魔法属性一、_doc_二、_module_ 和 _class_三、_init_四、_del_五、_call_六、_str_七、\ dict八 、_getitem__与__setitem__与__delitem_九、_getslice__与__setslice__与__delslice_

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