构建抽奖人员信息的类结构; 新建一个Person类作为父类,存储一些基本属性和通用属性; 新建一个Student类,作为Person的子类,重写父类的部分方法,用于获取Student对象独有信息; 新建一个Teacher类,作为Person的子类,重写父类的部分方法,用于获取Teacher对象独有信息; 通过多态和工厂模式来构建耦合度低的代码框架结构;
时间: 2023-11-27 22:50:28 浏览: 65
设计一个Person类,有Person类派生一个Student类和一个Teacher类
以下是抽奖人员信息的类结构:
```
class Person:
def __init__(self, name, age, phone):
self.name = name
self.age = age
self.phone = phone
def get_basic_info(self):
return {"name": self.name, "age": self.age, "phone": self.phone}
def get_specific_info(self):
pass
class Student(Person):
def __init__(self, name, age, phone, school, grade):
super().__init__(name, age, phone)
self.school = school
self.grade = grade
def get_specific_info(self):
return {"school": self.school, "grade": self.grade}
class Teacher(Person):
def __init__(self, name, age, phone, department, title):
super().__init__(name, age, phone)
self.department = department
self.title = title
def get_specific_info(self):
return {"department": self.department, "title": self.title}
```
以上代码中,`Person`是所有人员的父类,包含姓名、年龄、电话等基本信息。子类`Student`和`Teacher`分别表示学生和老师,它们继承了`Person`的基本信息,并添加了各自独有的属性。
为了实现多态和工厂模式,可以使用一个`PersonFactory`类来创建不同类型的人员对象:
```
class PersonFactory:
@staticmethod
def create_person(person_type, **kwargs):
if person_type == "student":
return Student(**kwargs)
elif person_type == "teacher":
return Teacher(**kwargs)
else:
raise ValueError("Invalid person type")
```
以上代码中,`PersonFactory`类包含一个静态方法`create_person`,用于创建不同类型的人员对象。根据传入的`person_type`参数,它会调用相应的构造函数来创建对象,并返回该对象。
这样,就可以通过`PersonFactory`类来创建不同类型的人员对象,而不需要在外部直接调用`Student`或`Teacher`的构造函数,从而实现了耦合度低的代码框架结构。例如:
```
person1 = PersonFactory.create_person("student", name="Tom", age=18, phone="123456789", school="ABC School", grade=12)
person2 = PersonFactory.create_person("teacher", name="Alice", age=35, phone="987654321", department="Math", title="Professor")
print(person1.get_basic_info())
print(person1.get_specific_info())
print(person2.get_basic_info())
print(person2.get_specific_info())
```
以上代码中,首先通过`PersonFactory`类分别创建了一个学生对象和一个老师对象。然后分别调用它们的`get_basic_info()`和`get_specific_info()`方法,输出了它们的基本信息和特定信息。
阅读全文