python学习笔记——特殊成员和魔法方法

上篇:https://blog.csdn.net/qq_42489308/article/details/89423305

特殊成员和魔法方法

Python中有大量类似__doc__这种以双下划线开头和结尾的特殊成员及“魔法方法”,它们有着非常重要的地位和作用,也是Python语言独具特色的语法之一!

python学习笔记——特殊成员和魔法方法_第1张图片

__init__ :      构造函数,在生成对象时调用
__del__ :       析构函数,释放对象时使用
__repr__ :      打印,转换
__setitem__ :   按照索引赋值
__getitem__:    按照索引获取值
__len__:        获得长度
__cmp__:        比较运算
__call__:       调用
__add__:        加运算
__sub__:        减运算
__mul__:        乘运算
__div__:        除运算
__mod__:        求余运算
__pow__:        幂

__doc__

class Foo:
    """ 测试 """
    def func(self):
        pass
# 打印类的说明文档 
print(Foo.__doc__)
测试

__init__()

实例化方法,通过类创建实例时,自动触发执行。

class Foo:
    def __init__(self, name):
        self.name = name
obj = Foo(jack') # 自动执行类中的 __init__ 方法

__del__()

析构方法,当对象在内存中被释放时,自动触发此方法。

注:此方法一般无须自定义,因为Python自带内存分配和释放机制,除非你需要在释放的时候指定做一些动作。析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

class Foo:
    def __del__(self):
        print("我被回收了!")
        
obj = Foo()
obj1 = obj
del obj
del obj1
print("========================")

__call__()

如果为一个类编写了该方法,那么在该类的实例后面加括号,可会调用这个方法。

注:构造方法的执行是由类加括号执行的,即:对象 = 类名(),而对于__call__() 方法,是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
    def __init__(self):
        pass
    def __call__(self, *args, **kwargs):
        print('__call__')

obj = Foo()     # 执行 __init__
obj()       # 执行 __call__

__dict__

列出类或对象中的所有成员!非常重要和有用的一个属性。

class Province:
    country = 'China'
    def __init__(self, name, count):
        self.name = name
        self.count = count
    def func(self, *args, **kwargs):
        print('func')
# 获取类的成员
print(Province.__dict__)

__new__()

__new__() 方法是在类准备将自身实例化时调用

class Dog(object):
    def __init__(self):
        print("init方法")
    
    def __new__(cls):
        print(id(cls))
        print("new方法")
        return object.__new__(cls)

print(id(Dog))
g = Dog()

1 调用__new__方法来创建一个对象 然后返回这个对象的引用
2 调用__init__方法  把返回值传进去
3 返回对象的引用

 

你可能感兴趣的:(python学习笔记,python,编程语言,特殊成员,魔法方法,程序员)