有人能解释一下为什么我在运行下面的Python脚本时会得到不同的输出吗?
我不明白为什么getattr(sys.modules['importme'], 'MyClass')
不打印__repr__()
中定义的自定义MyClass
函数。
打印测试.py
#!/usr/bin/env python
import sys
import importme
def main():
# This line prints "<class 'importme.MyClass'>"
m = getattr(sys.modules['importme'], sys.argv[1])
# This line prints "<MyClass {'text':, 'number':0}>"
#m = importme.MyClass()
print(m)
if __name__ == '__main__':
main()
导入.py
class MyClass(object):
text = ''
number = 0
def __init__(self, text = '', number = 0):
self.text = text
self.number = number
def __repr__(self):
return "<MyClass {'text':%s, 'number':%d}>" % (self.text, self.number)
最佳答案
在第一种情况下,获取importme.MyClass
的类对象,打印的字符串是它的repr
,即类对象的repr
。
在第二种情况下,您创建一个MyClass
类型的实例,在这种情况下,打印将调用您的自定义repr
(__repr__
应用于类的实例)。
顺便说一下,自从你第一次import importme
,这个
getattr(sys.modules['importme'], sys.argv[1])
相当于:
getattr(importme, sys.argv[1])
我猜你在第一种情况下的意思是:
m = getattr(importme, sys.argv[1])()
关于python - 为什么getattr的行为与手动更新对象不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20361885/