• Python_魔法属性和方法


    魔法属性

    __doc__:表示类或方法的描述信息

    __moudle__:表示当前操作对象的模块,当前模块时,显示__main__

    __class__:表示当前操作对象的类型

    __name__:表示类或方法的名称

    class Foo:
        """ 类对象__doc__的属性值"""
    
        def func(self):
            """ 类方法的__doc__属性值 """
            pass
    
    
    foo = Foo()
    
    print("类对象的__doc__:", Foo.__doc__)
    print("实例对象的__doc__:", foo.__doc__)
    print("实例对象方法的__doc__:", foo.func.__doc__)
    
    print("类对象的__module__:", Foo.__module__)
    print("实例对象的__module__:", foo.__module__)
    print("实例对象方法的__module__:", foo.func.__module__)
    
    
    print("类对象的__class__:", Foo.__class__)
    print("实例对象的__class__:", foo.__class__)
    print("实例对象方法的__class__:", foo.func.__class__)
    
    
    print("类对象的__name__:", Foo.__name__)
    print("实例对象方法的__name__:", foo.func.__name__)

    执行结果

    魔法方法

    __new__()

    为对象分配内存空间,同时还返回对象的引用,在__init__之前被调用

    __init__ ()

    初始化实例对象属性的方法,创建实例对象时被调用

    class Person:
        def __init__(self, name):
            self.name = name
            self.age = 18
    
    
    obj = Person('laowang')  # 自动执行类中的 __init__ 方法

     __del__() 

    当对象在内存中被释放时被调用

    注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。

    class Foo:
        def __del__(self):
            pass

    __call__()

    对象后面加括号,触发执行

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

    class Foo:
        def __init__(self):
            pass
    
        def __call__(self, *args, **kwargs):
            print('__call__')
    
    
    obj = Foo()  # 执行 __init__
    obj()  # 执行 __call__

    __str__ ()

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

    class Foo:
        def __str__(self):
            return 'laowang'
    
    
    obj = Foo()
    print(obj)
    # 输出:laowang

    __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__)
    # 输出:{'__dict__': <attribute '__dict__' of 'Province' objects>, '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Province' objects>, 'func': <function Province.func at 0x101897950>, '__init__': <function Province.__init__ at 0x1018978c8>}
    
    obj1 = Province('山东', 10000)
    print(obj1.__dict__)
    # 获取 对象obj1 的属性
    # 输出:{'count': 10000, 'name': '山东'}
    
    obj2 = Province('山西', 20000)
    print(obj2.__dict__)
    # 获取 对象obj1 的属性
    # 输出:{'count': 20000, 'name': '山西'}

    __getitem__(),__setitem__(),__delitem__()

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

    # -*- coding:utf-8 -*-
    
    class Foo(object):
    
        def __getitem__(self, key):
            print('__getitem__', key)
    
        def __setitem__(self, key, value):
            print('__setitem__', key, value)
    
        def __delitem__(self, key):
            print('__delitem__', key)
    
    
    obj = Foo()
    
    result = obj['k1']      # 自动触发执行 __getitem__
    obj['k2'] = 'laowang'   # 自动触发执行 __setitem__
    del obj['k1']           # 自动触发执行 __delitem__

     __iter__()

    让一个对象变得可以迭代

    __next__()

    定义一个迭代器,让其能够通过next(迭代对象的迭代器)对一个可迭代对象进行迭代

    __enter__(),__exit__()

    用于定义上下文管理器

  • 相关阅读:
    工业网络的物理隔离与数据采集
    从勒索软件到工控系统网络安全
    数据结构导论之第五章图
    数据结构导论之第六章查找表
    数据结构导论之第七章排序
    数据结构导论之第三章(栈、队列、数组)
    第八章、网络安全基础
    第七章、无线与移动网络
    第六章、物理层
    第五章、数据链路层与局域网
  • 原文地址:https://www.cnblogs.com/testlearn/p/14469673.html
Copyright © 2020-2023  润新知