Python: 魔法属性

1. __doc__

表示类的描述信息

class Test(object):
    """描述类信息,这是一个测试类"""
    def fun(self):
        pass

print(Test.__doc__)     # 输出:描述类信息,这是一个测试类

2. __module__和 __class__

module 表示当前操作的对象在哪个模块
class 表示当前操作的对象的类是什么

class Person(object):
    def __init__(self):
        self.name = "xiaoli"

p = Person()
print(p.__module__)     # __main__
print(p.__class__)      # 

3. __init__

初始化方法,通过类创建对象时,自动触发执行

class Person2(object):
    def __init__(self, name):
        self.name = name
        self.age = 19

pp = Person2("xiaobai")     # 自动执行类中的__init__方法

4. __del__

当对象在内存中被释放时,自动执行
注:此方法一般无需定义,del的调用是由解释器在进行垃圾回收时自动触发执行的

class Foo(object):
    def __del__(self):
        pass

f = Foo()

4. __call__

对象后面加括号,触发执行
init方法的执行是由创建对象触发的,即 对象=类名();
而对于call方法的执行是由对象后加括号触发的,即 对象() 或 类()()

class Foo2(object):
    def __init__(self):
        print("__init__")

    def __call__(self, *args, **kwargs):
        print("__call__")

ff = Foo2()     # 执行__init__
ff()        # 执行__call__

5. __dict__

类或对象中的所有属性
类的实例属性属于对象;类中的类属性和方法等属于类

class Province(object):
    country = "China"

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print("func")

# 获取类的属性,即 类属性、方法
print(Province.__dict__)
# 输出:{'__module__': '__main__', 'country': 'China', '__init__': , 'func': , '__dict__': , '__weakref__': , '__doc__': None}

obj1 = Province("山东", 10000)
# 获取对象obj1的属性
print(obj1.__dict__)    # {'name': '山东', 'count': 10000}

6. __str__

如果一个类中定义了str方法,那么在打印对象时,默认输出该方法的返回值

class Test2(object):
    def __str__(self):
        return "str"

t = Test2()
print(t)        # str

7. __getitem__、__setitem__、__delitem__

用于索引操作,如字典。以上分别表示,获取、设置、删除数据

class Test3(object):
    def __getitem__(self, item):
        print("getitem", item)

    def __setitem__(self, key, value):
        print("setitem key = ", key, " value = ", value)

    def __delitem__(self, key):
        print("delitem", key)

t = Test3()
result = t["k1"]        # 自动触发执行__getitem__
t["k2"] = "xiaolan"     # 自动触发执行__setitem__
del t["k1"]             # 自动触发执行__delitem__

你可能感兴趣的:(Python: 魔法属性)