Şöyle bir şey yazdım ama daha da geliştirmek için bir ağaç oluşturmamız gerekebilir. (Bir de python 3.8 ile çalıştırmazsanız hata verir)
class Kişi:
def __init__(self, isim, cinsiyet, **akrabalar):
self.isim = isim
assert cinsiyet == "E" or cinsiyet == "K"
self.cinsiyet = cinsiyet
self.akrabalar = akrabalar
self.akrabalar["çocuk"] = set()
def __getitem__(self, attr):
return self.akrabalar[attr]
def __setitem__(self, attr, value):
assert isinstance(value, Kişi)
getattr(self, attr)(value)
def baba(self, baba):
self.akrabalar["baba"] = baba
baba.akrabalar["çocuk"].add(self)
def anne(self, anne):
self.akrabalar["anne"] = anne
anne.akrabalar["çocuk"].add(self)
def çocuk(self, çocuk):
self.akrabalar["çocuk"].add(çocuk)
if self.cinsiyet == "E":
çocuk.akrabalar["baba"] = self
else:
çocuk.akrabalar["anne"] = self
if (eş := self.akrabalar.get("eş", None)) != None:
if eş.cinsiyet == "E":
çocuk.akrabalar["baba"] = eş
else:
çocuk.akrabalar["anne"] = eş
def eş(self, eş):
self.akrabalar["eş"] = eş
eş.akrabalar["eş"] = self
self.akrabalar["çocuk"] = eş.akrabalar["çocuk"] = eş.akrabalar["çocuk"] | self.akrabalar["çocuk"]
def __repr__(self):
return self.isim
Ali = Kişi("Ali", "E")
Ayşe = Kişi("Ayşe", "K")
Veli = Kişi("Veli", "E")
Ali["eş"] = Ayşe
Ayşe["çocuk"] = Veli
print(Veli["baba"])