【问题标题】:How do I get the current file, current class, and current method with Python?如何使用 Python 获取当前文件、当前类和当前方法?
【发布时间】:2009-05-21 17:23:59
【问题描述】:
  • 运行代码的文件的名称
  • 运行代码的类的名称
  • 运行代码的方法名称(类的属性)

【问题讨论】:

    标签: python filenames


    【解决方案1】:

    以下是每个示例:

    from inspect import stack
    
    class Foo:
        def __init__(self):
            print __file__
            print self.__class__.__name__
            print stack()[0][3]
    
    f = Foo()
    

    【讨论】:

    • 您是否尝试从命令行运行它?显然那时还没有定义;尝试使用代码创建一个文件并执行 python 文件名 - 它会按预期工作。
    • 为什么不检查当前帧?
    • self.__class__ 不是当前类。当前班级是__class__
    【解决方案2】:
    import sys
    
    class A:
        def __init__(self):
            print __file__
            print self.__class__.__name__
            print sys._getframe().f_code.co_name
    
    a = A()
    

    【讨论】:

    • 在模块之外使用私有方法是否被认为是一种不好的做法,并且违背了 Python sys 库的最初目的?没有更好的办法吗?
    • self.__class__ 不是当前类。当前班级是__class__
    【解决方案3】:

    【讨论】:

    • self.__class__ 不是当前类。当前班级是__class__
    【解决方案4】:

    非常小心。考虑:

    class A:
        pass
    
    B = A
    b = B()
    

    b 这里的“类名”是什么?是A还是B?为什么?

    关键是,您不需要知道或关心。一个对象就是它本身:它的名字很少有用。

    【讨论】:

    • 类名是A,因为bB实例,而B又是A引用这是一个
    • 对于最终用户,当然;但在调试时非常有用——比如异常处理程序或类似的报告它在哪里。您可以编写一个很好的错误消息来表达相同的内容,但无论如何它都会经常包含这些信息,在这种情况下,每次都输入它似乎是一种浪费。此外,要构建(例如)通用日志记录包,能够自动提供它非常有用。如果你的论点成立,它是否也同样适用于 isinstance(),这肯定是重要且有用的?
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多