2017-03-20 6 views
0

私は、特定のクラス内のすべてのフィールドのリストを簡単に表示できることがわかりました。 EmployerProfile_metaクラスを使用して別のクラスのフィールドリストを表示

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

たとえば、別のクラスがあるとします。 FinancialProfileであり、両方のクラスが互いに派生しない。私はこの特定のクラスから他のクラスのフィールドにアクセスしたいと思います。私はFinancialProfileからEmployerProfileのフィールドのリストを作成したいと考えています。どうすればそのようなことができますか? super()メソッドはこれを行うには最適な方法ですか?

ありがとうございます!

答えて

0

クラスはPythonのオブジェクトであるため、実行時にクラスを作成または変更できます。あなたは「メタクラス」と呼ばれている必要なもの、ここでいくつかの例は以下のとおりです。 http://eli.thegreenplace.net/2011/08/14/python-metaclasses-by-example

あなたのクラスが互いから継承しない場合 - super()を使用する方法はありません。ここ

は、クラスAのメンバーの完全なコピーを有するCクラスBの作成例である:

#!/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モデルクラスの場合、解決策は異なるかもしれません。

+0

私はpython 2.7を使用しています。あなたの答えを明確にすることができるいくつかのものを追加できますか? –

関連する問題