类中的setter问题,将None值分配给属性

时间:2019-06-02 01:09:19

标签: python python-3.x class

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

我添加了两个设置方法,以验证提供的年龄和姓名是否符合某些条件,例如如果名称的长度小于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"

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您的方法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)