首页 > 解决方案 > 如何使子类的每个实例不需要父属性(有点?)

问题描述

class User:
    def __init__(self, username):
        self.username = username

    @classmethod
    def get_user(cls):
        return cls(input("Username: "))
 

class Budget(User):
    def __init__(self, monthtly_income):
        super().__init__(User.get_user())
        self.monthly_income = monthtly_income
        self.perc_lis = []
        self.category_obj_lis = []
        self.category_name_lis = []
        self.value_lis = []
...
# creates objects and adds them to a list
        for i in range(len(self.category_name_lis)):
            self.category_obj_lis.append("")
            self.category_obj_lis[i] = Category(self.category_name_lis[i], self.monthly_income)

...

class Category(Budget):
    def __init__(self, name, monthly_income):
        super().__init__(monthly_income)
        self.name = name
        self.perc = 0
        self.amt = 0
        self.left = 0
        self.max = 0
    
# defines the percentage for each category
    def get_perc(self):
        self.perc = float(input(f"{self.name}: "))

当我运行它时,它会在我询问类别后询问用户名 3 次,因为我在循环中创建每个 Category 对象。在代码的开头询问用户名。我需要将类别类作为子类,因为我需要在未发布的代码中使用monthly_income 变量。我不太擅长继承,所以我很容易遗漏一些明显的东西。有没有办法让 Category 的每个实例不询问用户名,而只使用一开始就已经询问过的用户名?如果这有点令人困惑,我深表歉意,但不知道从这里去哪里。

标签: pythoninheritance

解决方案


推荐阅读