类中资源库的问题,将 None 值分配给属性



我正在学习类和继承,并尝试创建一个名为human和子类子类的简单抽象类,它必须从父类继承。父类和子类都只有两个属性 - 名称和年龄。

我添加了一些 setter 方法来验证提供的年龄和名称是否满足某些标准,例如,名称的长度是否小于 2 个字符,子类的年龄是正数还是小于 15。setter 方法中的检查工作正常,但是,当我提供有效数据时,子类中的两个属性都假定 None 值。


from abc import ABC, abstractmethod

class Hooman(ABC):
    @abstractmethod
    def __init__(self, age, name):
        self.age = self.set_age(age)
        self.name = self.set_name(name)
    @abstractmethod
    def set_age(self, age):
        pass
    @abstractmethod
    def set_name(self, name):
        pass

class LilHooman(Hooman):
    def __init__(self, age, name):
        super().__init__(age, name)
    def set_age(self, age):
        if age < 0:
            raise Exception("Age must be positive!")
        elif age > 14:
            raise Exception("Child's age must be less than 15!")
        else:
            self.age = age
    def set_name(self, name):
        if len(name) < 3:
            raise Exception("Name's length should not be less than 3 symbols!")
        else:
            self.name = name
    def __str__(self):
        return "Name: %s, Age: %d" % (self.name, self.age)

a = input()
b = int(input())
A1 = LilHooman(b, a)
print(A1.age, A1.name)

使用以下输入:

Mike
14

输出:

"None None"

我做错了什么?

您的方法set_ageset_name不返回任何内容。 所以这段代码不起作用:

def __init__(self, age, name):
    self.age = self.set_age(age)
    self.name = self.set_name(name)

相反,您应该使用:

def __init__(self, age, name):
    self.set_age(age)
    self.set_name(name)

最新更新