【发布时间】:2017-11-26 02:36:39
【问题描述】:
我有很多类都有这样的代码。每个__init__ 启动一个线程和一个带有类名的记录器。如何在__init__ 中以字符串形式获取当前类的名称?注意self可能不是当前类的一个实例,所以下面的不是很万无一失。
from threading import Thread
import logging
def myClassName(myclass):
myclass._class_name = myclass.__name__
return myclass
@myClassName
class SomeClass(object):
def __init__(self):
class_name = type(self)._class_name
print "My class name in __init__ is", class_name
self.thread = Thread(name=class_name)
self.logger = logging.getLogger(class_name)
更新:
澄清一下:
- 我想要定义的类的名称,而不是 传入的对象。
- 我不想硬编码类的名称。
- 我想让从一个脚本中复制/粘贴示例变得容易
另一个,唯一类名的提及越少越好。 (继承并不是很有效,因为有足够的自定义 差异使其尴尬。却不小心以名离开 错误的类是一个很难找到的错误。)
【问题讨论】:
-
在什么情况下
__init__方法的self不是是当前类的实例? -
@CoryKramer 例如,您定义了
def __init__(potato, self='haha!'): ... -
@wim 我认为假设
self是“方法的第一个参数”的简写是公平的 -
那么,鉴于您在 Rob 的回答中的评论,仅 硬编码
__init__中的名称有什么问题?