首页 > 解决方案 > Python 类练习不适用于父类

问题描述

我有以下练习,但我无法完全理解如何使其工作。

开发一个包含以下内容的程序:

1- 一个父类 Account 包含:

属性:

还包含一个返回 Account 类中的数据的方法。

2-定义继承自Account类的两个类FixedTime和Savings,其中

储蓄班

FixedTime 类将具有:

定义传递从 Account Class 继承的数据的init以具有:

方法:

我有以下代码:

class Account:
    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def get_name(self):
        return self.name
    def get_amount(self):
        return self.amount

class Saving(Account):
    def __init__(self, name, amount):
        Account.__init__(self, name, amount)
    def  get_info(self):
        print(f"{self.name}, {self.amount}")

class Fixrate(Account):
    def __init__(self, rate, time):
        self.rate = rate
        self.time = time
    def total_import(self):
        total = (self.amount * self.rate)/ 100
        return total
    def rate_info_print(self):
        print(f"Name: {self.name} term: {self.time} rate: {self.rate} Total rate: {self.total_import()}")


person = Account("andres", 5000)
date = Fixrate(4.5, 4)
Saving.get_info(person)
Fixrate.rate_info_print(person)

我收到此错误:

print(f"Name: {self.name} term: {self.time} rate: {self.rate} Total rate: {self.total_import()}") AttributeError: 'Account' object has no attribute 'time'

标签: pythonclasssubclass

解决方案


  • 你需要分配timenameFixrate __init__
  • 你创建一个实例来Fixrate调用date,那么你应该使用它而不是使用Fixrate.rate_info_print(person)

代码:

class Account:
    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def get_name(self):
        return self.name
    def get_amount(self):
        return self.amount

class Saving(Account):
    def __init__(self, name, amount):
        super().__init__(name, amount)
    def get_info(self):
        print(f"{self.name}, {self.amount}")

class Fixrate(Account):
    def __init__(self, rate, time, name, amount):
        self.rate = rate
        self.time = time
        super(Fixrate, self).__init__(name,amount)

    def total_import(self):
        total = (self.amount * self.rate)/ 100
        return total
        
    def rate_info_print(self):
        print(f"Name: {self.name} term: {self.time} rate: {self.rate} Total rate: {self.total_import()}")


person = Account("andres", 5000)
date = Fixrate(4.5, 4,"andres",5000)
Saving.get_info(person)
date.rate_info_print()

结果:

andres, 5000
Name: andres term: 4 rate: 4.5 Total rate: 225.0

或者如果你想使用person,你可以试试这个。

代码:

class Account:
    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def get_name(self):
        return self.name
    def get_amount(self):
        return self.amount

class Saving(Account):
    def __init__(self, name, amount):
        super().__init__(name, amount)
    def get_info(self):
        print(f"{self.name}, {self.amount}")

class Fixrate(Account):
    def __init__(self, rate, time, person):
        self.rate = rate
        self.time = time
        self.person = person
        # super(Fixrate, self).__init__(name,amount)

    def total_import(self):
        total = (self.amount * self.rate)/ 100
        return total
        
    def rate_info_print(self):
        self.name = person.get_name()
        self.amount = person.get_amount()
        print(f"Name: {self.name} term: {self.time} rate: {self.rate} Total rate: {self.total_import()}")


person = Account("andres", 5000)
date = Fixrate(4.5, 4,person)
Saving.get_info(person)
date.rate_info_print()

结果:

andres, 5000
Name: andres term: 4 rate: 4.5 Total rate: 225.0

推荐阅读