私はエラーを取得する:タイプ
NameError: name 'OrgUnit' is not defined
class OrgUnit(object):
def __init__(self,
an_org_name: str,
its_parent_org_unit: OrgUnit= None
):
self.org_unit_name = an_org_name
self.parent_org_unit = its_parent_org_unit
def __str__(self):
if self.parent_org_unit:
parent_org_unit_name = self.parent_org_unit.__str__()
return parent_org_unit_name + "->" + self.org_unit_name
else:
return self.org_unit_name
if __name__ == '__main__':
ibm_worldwide = OrgUnit("IBM_Worldwide")
ibm_usa = OrgUnit("IBM_USA", ibm_worldwide)
ibm_asia = OrgUnit("IBM_Asia", ibm_worldwide)
ibm_china = OrgUnit("IBM_China", ibm_asia)
print(ibm_worldwide)
print(ibm_usa)
print(ibm_asia)
print(ibm_china)
私はそれが(かなり一般的階層クラスの使用方法の問題のように思える、これは、知られているパラダイムであると確信しています自己参照クラス)。 its_parent_org_unit
のタイプをobject
に変更することができますが、それはうまくいかないようですが、主に自分の通話でタイプをチェックする能力があるためです。
IBM_Worldwide
IBM_Worldwide->IBM_USA
IBM_Worldwide->IBM_Asia
IBM_Worldwide->IBM_Asia->IBM_China
私は考えや提案を開いています:its_parent_org_unit
で、私は、正しい結果を得るタイプobject
に変更。このようなことをする最も「ピジョンソニック」な方法は何ですか?
PS:この種の「自己参照クラス」のパラダイム/問題の名前は何ですか?私は他の提案を参照することができますか?
は、[この](http://stackoverflow.com/questions/2489669/function-parameter-types-in-python)とダイビングに「ダックタイピングお読みください";) – flaschbier
Tsk、@flaschbier、もし彼がタイプヒントを使いたいなら、彼に任せてください。 –