从派生类派生类

2024-04-23 17:32:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个类(CityNeighborhoodBlock

以下是City类的定义:

class City:
    def __init__(self, id_city, name_city):
        self.__id = id_city
        self.__name = name_city

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

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

然后我宣布:

city = City(5, "New York")
neighborhood = Neighborhood(1, "Brooklyn", 500, 5, "New York")
block = Block(11, 2, 20, 1, "Brooklyn", 500, 5, "New York")

并得到以下错误:

AttributeError: 'int' object has no attribute '_City__id'

Tags: nameselfidnumbercity定义initargs
1条回答
网友
1楼 · 发布于 2024-04-23 17:32:28

您忘记在Block.__init__()实现中传递self

Neighborhood.__init__(*neighborhood_args, **kwargs)

所以传入的第一个参数是一个整数。现在Neighbourhood.__init__()self绑定到1,您将得到错误。只需添加self

class Block(Neighborhood):
    def __init__(self, id_block, number_block, number_flats, *neighborhood_args, **kwargs):
        Neighborhood.__init__(self, *neighborhood_args, **kwargs)

相关问题 更多 >