在Python中使用变量作为类名?

49 投票
6 回答
58332 浏览
提问于 2025-04-11 09:28

我想知道在Python中如何使用变量来表示对象和函数的名字。在PHP中,你可以这样做:

$className = "MyClass";

$newObject = new $className();

那么在Python中要怎么做呢?或者说,我是不是完全没理解Python的一些基本区别,如果是的话,那到底是什么呢?

6 个回答

25

如果你想在Python中创建一个动态类(也就是说,这个类的名字是一个变量),你可以使用type()这个函数,它需要三个参数:名字、基类和属性。

>>> class_name = 'MyClass'
>>> klass = type(class_name, (object,), {'msg': 'foobarbaz'})

<class '__main__.MyClass'>

>>> inst = klass()
>>> inst.msg
foobarbaz
  • 不过要注意,这个方法并不会“实例化”这个对象(也就是不会调用构造函数等)。它只是创建了一个新的(!)同名类。
68

假设某个模块里有一个叫“class_name”的类:

import some_module
klass = getattr(some_module, "class_name")
some_object = klass()

我想提醒一下,这里要小心:把字符串变成代码可能会很危险,特别是当这个字符串是用户输入的情况下,所以在这种情况下一定要考虑安全性。 :)

还有一种方法(假设我们仍然在使用“class_name”):

class_lookup = { 'class_name' : class_name }
some_object = class_lookup['class_name']()  #call the object once we've pulled it out of the dict

后一种方法可能是最安全的做法,所以如果有可能的话,最好使用这种方法。

30

在Python中,

className = MyClass
newObject = className()

第一行让变量 className 指向和 MyClass 一样的东西。接下来的一行通过 className 变量来调用 MyClass 的构造函数。

举个具体的例子:

>>> className = list
>>> newObject = className()
>>> newObject
[]

(在Python中,listlist 类的构造函数。)

不同的是,在PHP中,你需要用字符串来表示你想要引用的类名,而在Python中,你可以直接引用同一个类。如果你必须使用字符串(比如类名是动态生成的),那么你就需要用其他的方法来处理。

撰写回答