如何使用Python获取当前文件、当前类和当前方法? 从中运行代码的文件的名称 从中运行代码的类的名称 运行代码的方法(类的属性)的名称
对于其余部分,请使用sys和trace模块 更多信息: 和 您是否希望它用于错误报告,因为回溯模块可以处理:如何使用Python获取当前文件、当前类和当前方法? 从中运行代码的文件的名称 从中运行代码的类的名称 运行代码的方法(类的属性)的名称,python,filenames,Python,Filenames,对于其余部分,请使用sys和trace模块 更多信息: 和 您是否希望它用于错误报告,因为回溯模块可以处理: 以下是每种方法的示例: from inspect import stack class Foo: def __init__(self): print __file__ print self.__class__.__name__ print stack()[0][3] f = Foo() 小心点。考虑: class A:
以下是每种方法的示例:
from inspect import stack
class Foo:
def __init__(self):
print __file__
print self.__class__.__name__
print stack()[0][3]
f = Foo()
小心点。考虑:
class A:
pass
B = A
b = B()
这里的b
的“类名”是什么?是A还是B?为什么?
关键是,你不需要知道或关心。对象就是这样:它的名称很少有用。您是否试图从命令行运行它?很明显,当时还没有定义;尝试用代码创建一个文件并使用python文件名-它将按预期工作。为什么不检查.currentframe?
self.\uuuuu class\uuuu
不是当前类。当前类是\uuu class\uuuu
。类名是A
,因为b
是b
的一个实例,而b
又是对A
的引用,后者是一个类;但在调试时非常有用——比如异常处理程序或类似的报告。您可以编写一个很好的错误消息来说明同样的事情,但无论如何,它经常会包含这些信息,在这种情况下,每次键入这些信息似乎是一种浪费。此外,为了构建(例如)一个通用日志包,能够自动提供这一功能非常有用。如果您的论点成立,它是否也同样适用于isinstance(),这肯定是重要和有用的?在模块之外使用私有方法是否被认为是一种不好的做法,并且违背了Python sys库的最初目的?没有更好的方法吗?self.\uuuu class\uuu
不是当前的类。当前类是\uuuu class\uuuu
self.\uuuu class\uuuu
不是当前类。当前类为\uuuuuuuuuuuuuuuuuu
。
import sys
class A:
def __init__(self):
print __file__
print self.__class__.__name__
print sys._getframe().f_code.co_name
a = A()
class A:
pass
B = A
b = B()