python中的宏

Max*_*rai 2 python macros code-generation macropy

在我的项目中,我必须经常重复这部分代码:

class SimplePhysicObject(Object):
    def __init__(self):
        super(Object, self).__init__('SimplePhysicObject')
Run Code Online (Sandbox Code Playgroud)

但不是SimplePhysicObject每次都有新的字符串.有没有办法编写一些宏来使这项工作更容易?就像是:

DoTemplate(NewObject)
==>
class NewObject(Object):
    def __init__(self):
        super(Object, self).__init__('NewObject')
Run Code Online (Sandbox Code Playgroud)

UPD抱歉,Object我之前在代码中声明了我自己的类

Sve*_*ach 7

我没有看到为什么Object需要实际的类名作为参数的原因.您可以在Objectvia中访问实际的类名self.__class__.__name__:

class Object(object):
    def __init__(self):
        self.name = self.__class__.__name__

class SimplePhysicObject(Object):
    pass

a = SimplePhysicObject()
print a.name
Run Code Online (Sandbox Code Playgroud)

将打印

SimplePhysicObject
Run Code Online (Sandbox Code Playgroud)

这与您的原始代码略有不同:如果您派生自SimplePhysicObject,则该name属性将设置为派生类的名称,而原始代码将继续使用"SimplePhysicObject".

  • 鉴于OP的原因在于它是用于记录的,除了`self .__ class __.__ name__`之外,甚至可能根本不需要具有属性,但是鉴于这些答案现在很好.+1. (2认同)