类的__dict__返回的是:类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的__dict__里的,
而实例化对象的:__dict__中存储了一些类中__init__的一些属性值。
import的py文件 __dict__返回的是:__init__的一些属性值 + 该py文件中的不在class中的方法(可以进行调用并得到返回值)
一、在一个py文件内调用:
可以通过__dict__访问类中的所有属性的键值对
__dict__的返回值为字典,你可以通过
class MyTestDict(object):a = 0b = 1def __init__(self):self.a = 2self.b = 3def test_func(name=None):print('I am {}'.format(name))@staticmethoddef static_test():print('static_test')@classmethoddef class_test(cls):print('class_test')myTestDict = MyTestDict()
print(MyTestDict.__dict__)
print(myTestDict.__dict__)
{'__module__': '__main__',
'a': 0,
'b': 1,
'__init__': <function MyTestDict.__init__ at 0x7f1057ed5700>,
'test_func': <function MyTestDict.test_func at 0x7f1057e00c10>,
'static_test': <staticmethod object at 0x7f1057f84cd0>,
'class_test': <classmethod object at 0x7f1057f21400>,
'__dict__': <attribute '__dict__' of 'MyTestDict' objects>,
'__weakref__': <attribute '__weakref__' of 'MyTestDict' objects>,
'__doc__': None}
{'a': 2, 'b': 3}
通过字典__dict__实例化类:
print(MyTestDict.__dict__["test_func"](name='XiaoMing'))
I am XiaoMing
二、在另外一个py文件调用:
official.py文件内容:
class MyTestDict(object):a = 0b = 1def __init__(self):self.a = 2self.b = 3def test_func(name=None):print('I am {}'.format(name))@staticmethoddef static_test():print('static_test')@classmethoddef class_test(cls):print('class_test')# 如果在class外部,则在import这个py文件的时候,可以通过official.__dict__['test_func_Out'](name='Tom')来调用
def test_func_Out(name=None):print('I am {}'.format(name))return name
另外一个py文件:
这样可以调用另外py文件中的方法
import officialprint(official.__dict__['test_func_Out'](name='Tom'))
I am Tom
Tom
python中的__dict__ - 知乎