从函数中动态创建的类继承

2024-04-19 13:02:04 发布

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

由于我正在使用的特定模块的wierdness,我想知道是否有一个类继承在方法中本地创建的另一个类的属性的通用方法。例如,以下内容:

def DefForm():
    class F(object):
        foo = bar

    return F

class MyClass(DefForm):
    pass

m = myClass()
m.foo
>>> 'bar'

Tags: 模块方法return属性objectfoodefmyclass
2条回答

试试这个:

def DefForm():
    class F(object):
        foo = bar

    return F

FClass = DeftForm()

class MyClass(FClass):
    pass

m = myClass()
m.foo

从函数的返回值而不是函数本身继承类:

class MyClass(DefForm()):
     ...

Python中的类是普通对象,当您从一个对象继承时,您也只是从一个对象继承。你知道吗

例如,这也适用于:

class Foo(Bar if x == 3 else Baz):
    ...

事实上,我想不出这种情况会不起作用。即使这样也完全正确:

try:
    ...
except (FooExc if x == 3 else BarExc):
    ...

因此,类不仅是Python中的对象,而且在所有情况下都被视为对象。你知道吗

一般来说,生成类称为元编程(metaprogramming);这是许多语言(包括动态、编译和静态类型)中的一种常见做法,而且只要保持代码的健全性和可读性,这样做的代码通常没有什么“奇怪”之处。这与从其他函数创建和返回函数(这在函数式编程中非常普遍)或实际上返回任何对象一样正常。你知道吗

相关问题 更多 >