首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从基类动态创建派生类

如何从基类动态创建派生类
EN

Stack Overflow用户
提问于 2013-03-06 20:13:02
回答 2查看 89.4K关注 0票数 110

例如,我有一个基类,如下所示:

代码语言:javascript
复制
class BaseClass(object):
    def __init__(self, classtype):
        self._type = classtype

我从这个类中派生了其他几个类,例如

代码语言:javascript
复制
class TestClass(BaseClass):
    def __init__(self):
        super(TestClass, self).__init__('Test')

class SpecialClass(BaseClass):
    def __init__(self):
        super(TestClass, self).__init__('Special')

有没有一种很好的pythonic方法,可以通过函数调用动态创建这些类,将新类放到我当前的作用域中,比如:

代码语言:javascript
复制
foo(BaseClass, "My")
a = MyClass()
...

因为会有评论和问题,为什么我需要这样:派生类都有完全相同的内部结构,只是不同之处在于,构造函数接受许多以前未定义的参数。例如,MyClass接受关键字a,而类TestClass的构造函数接受bc

代码语言:javascript
复制
inst1 = MyClass(a=4)
inst2 = MyClass(a=5)
inst3 = TestClass(b=False, c = "test")

但是它们永远不应该使用类的类型作为输入参数,比如

代码语言:javascript
复制
inst1 = BaseClass(classtype = "My", a=4)

我得到了这个工作,但我更喜欢另一种方式,即动态创建类对象。

EN

回答 2

Stack Overflow用户

发布于 2013-03-06 20:19:40

type()是创建类的函数,特别是创建子类的函数,如下面的问题:

代码语言:javascript
复制
def set_x(self, value):
    self.x = value

# type() takes as argument the new class name, its base
# classes, and its attributes:
SubClass = type('SubClass', (BaseClass,), {'set_x': set_x})
# (More methods can be put in SubClass, including __init__().)

obj = SubClass()
obj.set_x(42)
print obj.x  # Prints 42
print isinstance(obj, BaseClass)  # True
票数 102
EN

Stack Overflow用户

发布于 2019-10-10 22:57:21

要创建具有动态属性值的类,请查看以下代码。注意:这是python编程语言的代码片段。

代码语言:javascript
复制
def create_class(attribute_data, **more_data): # define a function with required attributes
    class ClassCreated(optional extensions): # define class with optional inheritance
          attribute1 = adattribute_data # set class attributes with function parameter
          attribute2 = more_data.get("attribute2")

    return ClassCreated # return the created class

# use class

myclass1 = create_class("hello") # *generates a class*
票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15247075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档