python的__dict__、__call__、__class__

本文探讨了Python中对象的__dict__特殊属性,类的__call__方法如何实现实例化操作,以及__class__用于获取实例所属类的方法。通过实例A展示这些概念,并解释了它们在类和实例的不同作用及应用场景。
摘要由CSDN通过智能技术生成

1. python的__dict__
python中万物皆对象,基本只要是对象就会存在__dict__,不过部分对象除外,比如int,str,list这种内置的数据类型就没有__dict__
在这里插入图片描述
__dict__还存在于类实例和类属性中,虽然存在,但是两者存储东西不一致
类属性中存在的__dict__主要存放的静态函数、类函数、普通函数、全局变量以及一些内置的属性
类实例中存在的__dict__主要存放的是类实例中相关的变量等属性

class A(object):
    a = 1
    b = 2

    def __init__(self,a,b):
        self.a = a
        self.b = b

    def print_func_name(self):
        print("class __name__",self.__class__.__name__)

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


if __name__ == '__main__':
    a = A(3,4)
    print(A.__dict__)
    print(a.__dict__)
A.__dict__:{'__init__': <function A.__init__ at 0x0000026159BD58C8>, '__module__': '__main__', 'print_func_name': <function A.print_func_name at 0x000002615CC2C950>, '__weakref__': <attribute '__weakref__' of 'A' objects>, 'b': 2, '__doc__': None, '__call__': <function A.__call__ at 0x000002615CC2C9D8>, '__dict__': <attribute '__dict__' of 'A' objects>, 'a': 1}
a.__dict__:{'b': 4, 'a': 3}

2. python的__call__
__call__是python类中一个特殊的实例方法,类似于在类中重载 () 运算符,可以是类实例像普通函数一样,以 函数名() 使用

    a  = A(11,33)
    a()

类中类属性没有__call__,类方法是可调用对象,因此它有 __call__方法。

3. python的__class__
类实例的__class__会指向该实例对象对应的类,由此之后可以由类去调用其他的类属性

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值