-1
Ich habe 3 Klassen (City
, Neighborhood
und Block
). HierAbleiten einer Klasse von einer abgeleiteten Klasse
ist die Definition der City
Klasse:
class City:
def __init__(self, id_city, name_city):
self.__id = id_city
self.__name = name_city
Definition des Neighborhood
:
class Neighborhood(City):
def __init__(self, id_neighborhood, name_neighborhood, number_block, *city_args, **kwargs):
City.__init__(self, *city_args, **kwargs)
self.__id = id_neighborhood
self.__name = name_neighborhood
self.__number = number_block
Definition des Block
:
class Block(Neighborhood):
def __init__(self, id_block, number_block, number_flats, *neighborhood_args, **kwargs):
Neighborhood.__init__(*neighborhood_args, **kwargs)
self.__id = id_block
self.__number_b = number_block
self.__number_f = number_flats
Dann erkläre ich Einheiten:
city = City(5, "New York")
neighborhood = Neighborhood(1, "Brooklyn", 500, 5, "New York")
block = Block(11, 2, 20, 1, "Brooklyn", 500, 5, "New York")
Und diesen Fehler:
AttributeError: 'int' object has no attribute '_City__id'
Warum verwenden Sie die Vererbung dafür? Es scheint eher ein Kompositionsproblem zu sein. Was ist mit den Attributen '__two_leading_underscore'? Willst du den Namen Mangling verwenden? – jonrsharpe
Verwenden Sie keine doppelten führenden Unterstriche in Ihren Variablennamen. Je. – snakecharmerb
@snakecharmerb: Verwenden Sie sie beim Entwerfen eines Frameworks, und minimieren Sie die Wahrscheinlichkeit, dass Entwickler, die Ihr Framework verwenden, Attributnamen erstellen, die mit Ihrer internen Implementierung kollidieren. Dafür ist das Feature gedacht. –