python 3:类“template”(返回参数化类的函数)

2024-04-19 15:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,该函数被传递一个参数x,并返回一个新类CC应该是固定基类A的一个子类,只需添加一个:添加某个类属性并将其设置为等于x

换句话说:

class C(A):
  C.p = x # x is the parameter passed to the factory function

这容易吗?有什么问题我应该知道吗?


Tags: theto函数参数属性parameterisfactory
2条回答

type函数有一个动态构造新类的3参数版本。传递包含类的属性和方法的名称和adict

就你而言:

def class_factory(x):
    return type("C", (A,), {"p": x})

显然,您可以动态地设置类的名称,“C”,但请注意,为了使该类可公开访问,您还需要将函数的结果赋给一个变量。您可以使用globals()["C"] = ...动态地执行此操作,或者将类分配给字典,不管怎样。

首先,注意术语“类工厂”在Python中有些过时。它用于C++语言中,用于返回类的动态类型实例。它有一个名字,因为它在C++中很突出;它并不罕见,但是它很少见,给模式命名是有用的。然而,在Python中,这是经常做的——这是一个非常基本的操作,没有人再费心给它起一个特殊的名字。

另外,请注意,类工厂返回类的实例,而不是类本身。(再次,这是因为它来自C++之类的语言,它没有返回类的概念——只有对象。)但是,你说你想返回“一个新类”,而不是返回一个类的新实例。

创建本地类并返回它很简单:

def make_class(x):
    class C(A):
        p = x
    return C

相关问题 更多 >