2

有人可以解释为什么我在运行下面的 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()

导入文件

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)
4

1 回答 1

4

在第一种情况下,您获取 的类对象importme.MyClass打印的字符串是它的repr,即repr对象的。

在第二种情况下,您创建一个 type 的实例MyClass,在这种情况下,打印调用您的自定义repr__repr__适用于类的实例)。

顺便说一句,既然你第一次import importme,这个

getattr(sys.modules['importme'], sys.argv[1])

相当于:

getattr(importme, sys.argv[1])

我猜你在第一种情况下的意思是:

m = getattr(importme, sys.argv[1])()
于 2013-12-03T21:22:15.603 回答