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

换句话说:

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

这容易吗?我有什么需要注意的问题吗?

推荐答案

首先,请注意术语"类工厂"在Python中有些过时.它用于C++语言中,用于返回类的动态类型实例.它有一个名字,因为它在C++中突出;这种情况并不罕见,但非常罕见,因此给模式起个名字很有用.然而,在Python中,这是不断进行的——这是一个如此基本的操作,以至于再也没有人愿意给它起一个特殊的名字了.

另外,请注意,类工厂返回类的实例,而不是类本身.(再次,那是因为它来自C++之类的语言,没有返回类的概念——只有对象.但是,您说过要返回"一个新类",而不是一个类的新实例.

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

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

Python-3.x相关问答推荐

使用pybind11时,在sys.exit(0)处成功完成测试后,Python单元测试冻结

使用PANAS根据另两个列表中的值对一个列表中的字符串值进行分组

如果行在所有上级索引中都为0,如何删除下级索引行?

如何使用Python将嵌套的XML转换为CSV

PANDAS中当前数据帧的匹配与更新

为什么 get_form 方法中小部件的更改没有反映 Django 管理站点中的更改

如何查找以开头并替换的字符串

删除列表中的第二个出现

txt 文件与不同的分隔符到整数列表

pymongo 失败并出现错误未定义

错误:预期语句,发现 py:Dedent

在计算之前删除包含某些值的组合

如果一个失败,如何取消收集中的所有剩余任务?

在 Python 3 中获取所有超类

接收导入错误:没有名为 *** 的模块,但有 __init__.py

Windows 下 Python 3.x 的 OpenCV

为什么变量 = 对象不像变量 = 数字那样工作

如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python

在动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll 中找不到序数 242

在 PostgreSQL 上使用 SQLAlchemy 创建全文搜索索引