1__doc__ 魔法属性

描述信息,必须紧跟类名或方法名的第一行,不能有空格,只能用三引号

class Person:
    """这是类的介绍"""
    def funa(self) :
        """这是方法的介绍"""
        pass

print(Person.__doc__)#这是类的介绍
p=Person()
print(p.funa.__doc__)#这是方法的介绍

2__modle__和__class__魔法属性

显示模块(.py)名和类名
__modle__可以用类名调用
__class__只能用对象,用类名.__class__结果永远是type

class B:
    def funa(self) :
        print("fun")
b = B()
print(b.__module__)#__main__ 当前运行的模块会显示main,否则显示.py文件的名字
print(b.__class__)#<class '__main__.B'>

3__str()__魔法方法

打印一个对象是,默认打印内存地址,如果有这个方法,将默认打印这个方法的返回值
返回值必须是字符串

class A:
    def __str__(self):
        return  "A的str方法的返回值"
a = A()
print(a)#A的str方法的返回值

4__del()__魔法方法

析构函数

class Human:
    def __del__(self):
        print("析构执行11")

man= Human()
del man #析构执行11

5__call()__魔法方法

把一个不可调用对象转换为可调用对象
例如下方A的对象a,正常情况a()会报错,但是有了__call__,当写a()时,会调用call里的内容

class A:
    def __call__(self, *args, **kwargs):
        print("a被调用")
a= A()
a()#输出 a被调用
print(callable(a))#True   callable()用来监测是不是一个可调用对象

6__dict()__魔法方法

对于对象 返回实例属性的字典,不包含方法,和类属性

class Person:
    species = "人类"  # 类属性

    def __init__(self, name, age):
        self.name = name
        self.age = age
    def funa(self) :
        pass

p = Person("张三", 18)
print(p.__dict__)#返回{'name': '张三', 'age': 18}

对于类 返回类属性 方法的名字和参数 不包含实例属性

class Person:
    species = "人类"  # 类属性

    def __init__(self, name, age):
        self.name = name
        self.age = age
    def funa(self) :
        pass

print(Person.__dict__)#{'__module__': '__main__', 'species': '人类', '__init__': <function Person.__init__ at 0x00000000011749A0>, 'funa': <function Person.funa at 0x0000000001175760>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐