使用 Python class 名称定义 class 变量
Using Python class name to define class variables
我有一个class
class MyClass(object):
ClassTag = '!' + 'MyClass'
我不想显式分配 'MyClass'
,而是想使用一些构造来获取 class 名称。如果我在 class 函数中,我会做类似
的事情
@classfunction
def Foo(cls):
tag = '!' + cls.__class__.__name__
但我在 class 范围内,但不在任何函数范围内。解决这个问题的正确方法是什么?
非常感谢
Instead of explicitly assigning 'MyClass' I would like to use some construct to get the class name.
您可以使用 class 装饰器结合 class 对象的 __name__
属性来完成此操作:
def add_tag(cls):
cls.ClassTag = cls.__name__
return cls
@add_tag
class Foo(object):
pass
print(Foo.ClassTag) # Foo
除上述内容外,还有一些旁注:
从上面的例子可以看出,classes是使用
class
关键字,而不是 def
关键字。 def
关键字用于
定义函数。我建议浏览 教程
由 Python 提供,
掌握 Python 基础知识。
如果您不是在处理遗留代码,或需要 Python 2 库的代码,我强烈推荐 upgrading to Python 3. Along with the fact that the Python Foundation will stop supporting Python in 2020, Python 3 also fixes many quirks that Python 2 had, as well as provides new, useful features. If you're looking for more info on how to transition from Python 2 to 3, a good place to start would be here。
一个简单的方法是写一个装饰器:
def add_tag(cls):
cls.ClassTag = cls.__name__
return cls
# test
@add_tag
class MyClass(object):
pass
print(MyClass.ClassTag)
我有一个class
class MyClass(object):
ClassTag = '!' + 'MyClass'
我不想显式分配 'MyClass'
,而是想使用一些构造来获取 class 名称。如果我在 class 函数中,我会做类似
@classfunction
def Foo(cls):
tag = '!' + cls.__class__.__name__
但我在 class 范围内,但不在任何函数范围内。解决这个问题的正确方法是什么?
非常感谢
Instead of explicitly assigning 'MyClass' I would like to use some construct to get the class name.
您可以使用 class 装饰器结合 class 对象的 __name__
属性来完成此操作:
def add_tag(cls):
cls.ClassTag = cls.__name__
return cls
@add_tag
class Foo(object):
pass
print(Foo.ClassTag) # Foo
除上述内容外,还有一些旁注:
从上面的例子可以看出,classes是使用
class
关键字,而不是def
关键字。def
关键字用于 定义函数。我建议浏览 教程 由 Python 提供, 掌握 Python 基础知识。如果您不是在处理遗留代码,或需要 Python 2 库的代码,我强烈推荐 upgrading to Python 3. Along with the fact that the Python Foundation will stop supporting Python in 2020, Python 3 also fixes many quirks that Python 2 had, as well as provides new, useful features. If you're looking for more info on how to transition from Python 2 to 3, a good place to start would be here。
一个简单的方法是写一个装饰器:
def add_tag(cls):
cls.ClassTag = cls.__name__
return cls
# test
@add_tag
class MyClass(object):
pass
print(MyClass.ClassTag)