为什么getattr的行为与手动更新obj不同

2024-03-29 09:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下为什么我在运行下面的Python脚本时得到不同的输出吗?你知道吗

我不明白为什么getattr(sys.modules['importme'], 'MyClass')不打印在MyClass中定义的自定义__repr__()函数。你知道吗

你知道吗打印测试.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)

Tags: textpyimportselfmodulesnumbermaindef
1条回答
网友
1楼 · 发布于 2024-03-29 09:16:34

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

在第二种情况下,创建类型为MyClass的实例,在这种情况下,printing调用您的自定义repr__repr__应用于类的实例)。你知道吗

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

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

相当于:

getattr(importme, sys.argv[1])

我猜你在第一种情况下想做的是:

m = getattr(importme, sys.argv[1])()

相关问题 更多 >