我正在学习类和继承,并试图创建一个简单的抽象类,称为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"
我在做什么错了?
答案 0 :(得分:0)
您的方法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)