[python] python中的魔法方法和属性
一 魔法属性
__module__ : 表示当前操作对象所在的模块
__class__ 当前操作对象所在的类
__doc__ 类的描述信息,函数也可以,必须在最上面一行,且用多行注释来写
class Sinstance(object):"""这是一个重写__new__方法的单例类"""obj = Nonedef __new__(cls, *args, **kwargs):"""__new__<UNK>"""if cls.obj is None:cls.obj = super().__new__(cls)return cls.objdef __init__(self):print("__init__")
- 比如这种方式就能够别__doc__属性捕获到
"""这是一个重写__new__方法的单例类"""
def test():"""函数的描述信息"""
print(Sinstance.__doc__)
print(Sinstance.__new__.__doc__)
print(test.__doc__)
print(test.__module__)
print(test.__class__)
p1 = Sinstance()
print(p1.__module__)
print(p1.__class__)
二 魔法方法
__str__():对象的描述信息,实例对象 和 __doc__属性不同这个是返回的是类对象的描述信息
-
如果类中定义了此方法,那么再打印对象是,默认输出该方法的返回值,也就是打印该方法中的返回值,不再打印地址的引用 # __str__方法必须有返回,并且是字符串类型
class strtest(object):name = "python"def __str__(self):return "测试"+self.name+"__str__魔法方法"
str_test = strtest()
print(str_test)
# __del__() : 析构函数 在删除某个对象时调用# __call__(): 使一个实例对象成为可调用对象 (像函数那样被调用)
- 这个就会输出false因为没有定义__call__方法
class enablecall_test(object):"""测试可调用对象"""pass
callobject = enablecall_test()
print(callable(callobject))
我们来定义一个__call__方法
- 使用实例对象()-->比如下面的callobject()实际上就是调用-->__call__方法
class enablecall_test(object):"""测试可调用对象"""def __call__(self):print("enablecall_test")
# 其实就是在调用__call__方法
callobject = enablecall_test()
callobject()
print(callable(callobject))