pojawia się błąd:typów parametrów dla obiektów typu, że to jest zdefiniowane
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)
Jestem pewien, że jest to znany paradygmat, jak wydaje się to dość powszechne hierarchicznej problemu użytkowania klasa (klasa samoodniesienia). Wiem, że mogłem zmienić typ its_parent_org_unit
na object
i to działa, ale wydaje mi się, że jest to niewłaściwe, głównie dlatego, że obezwładnia moją zdolność sprawdzania typów w moich połączeniach. Z its_parent_org_unit
zmienił się typ object
uzyskać poprawne wyniki:
IBM_Worldwide
IBM_Worldwide->IBM_USA
IBM_Worldwide->IBM_Asia
IBM_Worldwide->IBM_Asia->IBM_China
Jestem otwarty na myśli i sugestie. Jaki jest najbardziej "pythonic" sposób na zrobienie tego rodzaju rzeczy?
PS: Jaka jest nazwa tego rodzaju paradygmatu/problemu z "samodefiniowaniem klasy", który mógłbym wykorzystać do wyszukania innych sugestii?
Proszę przeczytać [to] (http://stackoverflow.com/questions/2489669/function-parameter-types-in-python) i zanurzyć się „kaczka wpisując ";) – flaschbier
Tsk, @flaschbier, jeśli chce używać podpowiedzi typu, pozwól mu. –