4

引数を取り、その名前が引数自体であるクラスを作成したいと思います。たとえば、「Int」を引数として取り、「Int」という名前のクラスを作成します。つまり、私のクラスは次のようになります。

class Int :
    def __init__(self,param) :
        self.value = 3

私はこれを行うことによってこれをやっています。

def makeClass( x ) :

    return eval( 'class %s :\n    def __init__(self,param) :\n        self.type = 3'%(x,))

そして呼び出す

myClass = makeClass('Int')
myInt = myClass(3)

これで構文エラーが発生します。助けてください。

4

2 に答える 2

6

eval式の評価に使用されます。式でclassはなく、ステートメントです。おそらくあなたは次のようなものが欲しいですexecか?

補足として、ここで行っていることはおそらく を使用して非常に簡単に実行でき、 /typeを使用することによるパフォーマンスとセキュリティへの影響をすべて回避できます。evalexec

def cls_init(self,param):
    self.type = 3

Int = type("Int",(object,),{'__init__':cls_init})
#           ^class name
#                ^class bases -- inherit from object.  It's a good idea :-)
#                           ^class dictionary.  This is where you add methods or class attributes.
于 2013-01-09T18:28:40.557 に答える