我正在学习类和继承,并尝试创建一个名为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_age
和set_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)