首页 > 解决方案 > 对象没有属性,使用类

问题描述

不断获取“RestaurantReview”对象没有属性“_RestaurantReview__name”,但似乎我已将所有内容从 Review 类正确传递到 ReviewRestaurant

class Review:
    def __init__(self, nm, dt, strs):
        self.__name = nm
        self.__date = dt
        self.__stars = strs

    def set_name(self, name):
        self.__name = name
    def set_date(self, date):
        self.__date = date
    def set_stars(self,stars):
        self.__stars = stars
    def get_name(self):
        return self.__name
    def get_date(self):
        return self.__date
    def get_stars(self):
        return self.__stars
    def __str__(self):
        return 'RESTAURANT: ' + 'Name: ' + str(self.__name) + 'Date: ' + str(self.__date) + 'Number of stars: ' + str(self.__stars)

class RestaurantReview:
    def __init__(self, nm, dt, strs, csne):
        Review.__init__(self, nm, dt, strs)
        self.__cuisine = csne
    def set_cuisine(self, cuisine):
        self.__cuisine = cuisine
    def get_cuisine(self):
        return self.__cuisine

    def __str__(self):
        return 'RESTAURANT: ' + 'Name: ' + str(self.__name) + 'Date: ' + str(self.__date) + 'Number of stars: ' + str(self.__stars) + 'Cuisine' + str(self.__cuisine)


def main():
    r2 = RestaurantReview('Red Robin', '5-3-18', 4, 'Burgers')
    print(r2)

main()

标签: pythonclassattributeerror

解决方案


您需要将 RestaurantReview 声明为 Review 的子类:

class Review:
    def __init__(self, nm, dt, strs):
        self.__name = nm
        self.__date = dt
        self.__stars = strs

    def __str__(self):
        return 'RESTAURANT: ' + 'Name: ' + str(self.name) + 'Date: ' + str(self.date) + 'Number of stars: ' + str(self.stars)

    @property
    def name(self):
        return self.__name

    @property
    def date(self):
        return self.__date

    @property
    def stars(self):
        return self.__stars

class RestaurantReview(Review):
    def __init__(self, nm, dt, strs, csne):
        super(RestaurantReview, self).__init__(nm, dt, strs)
        self.__cuisine = csne

    @property
    def cuisine(self):
        return self.__cuisine

    def __str__(self):
        return 'RESTAURANT: ' + 'Name: ' + str(self.name) + 'Date: ' + str(self.date) + 'Number of stars: ' + str(self.stars) + 'Cuisine' + str(self.cuisine)


def main():
    r2 = RestaurantReview('Red Robin', '5-3-18', 4, 'Burgers')
    print(r2)

main()

您不需要私有化您的属性,否则您必须创建 getter 方法来访问您的每个私有属性。

编辑:我将属性保留为私有,并添加了属性以获取它们的值。


推荐阅读