【发布时间】:2009-05-21 17:23:59
【问题描述】:
- 运行代码的文件的名称
- 运行代码的类的名称
- 运行代码的方法名称(类的属性)
【问题讨论】:
【问题讨论】:
以下是每个示例:
from inspect import stack
class Foo:
def __init__(self):
print __file__
print self.__class__.__name__
print stack()[0][3]
f = Foo()
【讨论】:
self.__class__ 不是当前类。当前班级是__class__。
import sys
class A:
def __init__(self):
print __file__
print self.__class__.__name__
print sys._getframe().f_code.co_name
a = A()
【讨论】:
self.__class__ 不是当前类。当前班级是__class__。
self.__class__.__name__ # name of class i'm in
其余的 sys 和 trace 模块
http://docs.python.org/library/sys.html http://docs.python.org/library/trace.html
更多信息: https://mail.python.org/pipermail/python-list/2001-August/096499.html 和 http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
您是否希望它用于错误报告,因为回溯模块可以处理:
【讨论】:
self.__class__ 不是当前类。当前班级是__class__。
要非常小心。考虑:
class A:
pass
B = A
b = B()
b 这里的“类名”是什么?是A还是B?为什么?
关键是,您不需要知道或关心。一个对象就是它本身:它的名字很少有用。
【讨论】:
A,因为b是B的实例,而B又是A的引用这是一个类。