Zależy czy chcesz aby to było zachowane przy dziedziczeniu, by dogrzebać się kto jest rodzicem, czy chcesz nazwę klasy stworzonej.
Jeśli chcesz aby ta metoda była dziedziczona, a zwracała nazwę utworzonej klasy, sposób podał już kolega wyżej w komentarzu, zamieszczę go po hashu w przykładzie poniżej.
Przykład:
class Parent:
def creator_name(self):
return type(self).__name__ #Lub self.__class__.__name__
def always_parent_name(self):
return Parent.__name__
def child_or_parent(self):
return Parent.__name__
class Child(Parent):
def child_or_parent(self):
return Child.__name__
class Grandchild(Child):
pass
if __name__ == "__main__":
p = Parent()
print(p.creator_name()) #~ Parent
print(p.always_parent_name()) #~ Parent
print(p.child_or_parent()) #~ Parent
c = Child()
print(c.creator_name()) #~ Child
print(c.always_parent_name()) #~ Parent
print(c.child_or_parent()) #~ Child @Edit: A jednak się nadpisuje [old: (Wbrew pozorom nie nadpisuje się.)]
g = Grandchild()
print(g.creator_name()) #~ Grandchild
print(g.always_parent_name()) #~ Parent
print(g.child_or_parent()) #~ Child
@Edit: Ślepy jestem i zastanawiało mnie czemu się nie nadpisało. Po prostu nie zamieniłem literek. Wybacz :)