使用_meta类显示另一个类的字段列表

时间:2017-03-20 01:10:52

标签: python django class field

我知道我们可以轻松地显示特定类中所有字段的列表,例如EmployerProfile

[f.name for f in EmployerProfile._meta.get_fields()]

假设我们有另一个班级,例如FinancialProfile,这两个班级都不是彼此派生的。我想从这个特定的类访问其他类的字段。我的意思是我想从EmployerProfile内部FinancialProfile创建一个字段列表。我怎么能这样做? super()方法是一种很好的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

类是Python中的对象,因此您可以在运行时创建或修改它们。你需要的是什么叫" Metaclasses",这里有一些例子: http://eli.thegreenplace.net/2011/08/14/python-metaclasses-by-example

如果您的课程没有相互继承 - 则无法使用super()

以下是创建c类B的示例,其中包含A类成员的完整副本:

#!/usr/bin/python

class A():
    a = 5
    b = 'b'
    c = "test value"

a = A()
print "Class A members:"
print a.a
print a.b
print a.c

# Please note that class B does not explicitly declare class A members
# it is empty by default, we copy all class A methods in __init__ constructor
class B():

    def __init__(self):

        # Iterate class A attributes
        for member_of_A in A.__dict__.keys():
            # Skip private and protected members
            if not member_of_A.startswith("_"):
                # Assign class A member to class B
                setattr(B, member_of_A, A.__dict__[member_of_A])

b = B()
print "Class B members:"
print b.a
print b.b
print b.c

这是Python类的示例,而不是Django模型。对于Django模型类,解决方案可能不同。