2024-04-19 15:10:04 发布
网友
我试图创建一个函数,该函数被传递一个参数x,并返回一个新类C。C应该是固定基类A的一个子类,只需添加一个:添加某个类属性并将其设置为等于x。
x
C
A
换句话说:
class C(A): C.p = x # x is the parameter passed to the factory function
这容易吗?有什么问题我应该知道吗?
type函数有一个动态构造新类的3参数版本。传递包含类的属性和方法的名称,基和adict。
就你而言:
def class_factory(x): return type("C", (A,), {"p": x})
显然,您可以动态地设置类的名称,“C”,但请注意,为了使该类可公开访问,您还需要将函数的结果赋给一个变量。您可以使用globals()["C"] = ...动态地执行此操作,或者将类分配给字典,不管怎样。
globals()["C"] = ...
首先,注意术语“类工厂”在Python中有些过时。它用于C++语言中,用于返回类的动态类型实例。它有一个名字,因为它在C++中很突出;它并不罕见,但是它很少见,给模式命名是有用的。然而,在Python中,这是经常做的——这是一个非常基本的操作,没有人再费心给它起一个特殊的名字。
另外,请注意,类工厂返回类的实例,而不是类本身。(再次,这是因为它来自C++之类的语言,它没有返回类的概念——只有对象。)但是,你说你想返回“一个新类”,而不是返回一个类的新实例。
创建本地类并返回它很简单:
def make_class(x): class C(A): p = x return C
type函数有一个动态构造新类的3参数版本。传递包含类的属性和方法的名称,基和adict。
就你而言:
显然,您可以动态地设置类的名称,“
C
”,但请注意,为了使该类可公开访问,您还需要将函数的结果赋给一个变量。您可以使用globals()["C"] = ...
动态地执行此操作,或者将类分配给字典,不管怎样。首先,注意术语“类工厂”在Python中有些过时。它用于C++语言中,用于返回类的动态类型实例。它有一个名字,因为它在C++中很突出;它并不罕见,但是它很少见,给模式命名是有用的。然而,在Python中,这是经常做的——这是一个非常基本的操作,没有人再费心给它起一个特殊的名字。
另外,请注意,类工厂返回类的实例,而不是类本身。(再次,这是因为它来自C++之类的语言,它没有返回类的概念——只有对象。)但是,你说你想返回“一个新类”,而不是返回一个类的新实例。
创建本地类并返回它很简单:
相关问题 更多 >
编程相关推荐