(1)创建一个类People,要求包含属性name和c

(1)创建一个类People,要求包含属性name和city,包含moveto(self,newcity)方法,并且要求People类的对象可以被转换为字符串形式,并且可以按照city属性进行排序。

(2)创建一个People类的子类Teacher类,要求新增属性school,将moveto方法改为newschool,并要求按照school排序。

(3)设计程序,创建4个People对象和4个Teacher对象,并放到列表中进行排序。

答案
class People:
    def __init__(self, name, city):
        self.name = name
        self.city = city

    def moveto(self, newcity):
        self.city = newcity

    # 对象转字符串
    def __str__(self):
        return f"People(name:{self.name}, city:{self.city})"

    # 按city排序,小于比较
    def __lt__(self, other):
        return self.city < other.city


class Teacher(People):
    def __init__(self, name, city, school):
        super().__init__(name, city)
        self.school = school

    # 重写moveto,改名为newschool
    def newschool(self, new_school):
        self.school = new_school

    def __str__(self):
        return f"Teacher(name:{self.name}, city:{self.city}, school:{self.school})"

    # Teacher按school排序
    def __lt__(self, other):
        return self.school < other.school


# (3) 创建4个People,4个Teacher,放入列表
lst = [
    People("张三", "Beijing"),
    People("李四", "Shanghai"),
    People("王五", "Guangzhou"),
    People("赵六", "Shenzhen"),
    Teacher("张老师", "Nanjing", "No.1 High"),
    Teacher("李老师", "Wuhan", "No.3 High"),
    Teacher("王老师", "Chengdu", "No.2 High"),
    Teacher("刘老师", "Hangzhou", "No.5 High")
]

# 注意:直接sort会因为People按city、Teacher按school,__lt__逻辑不一样,同类内部排序演示:
people_list = lst[:4]
teacher_list = lst[4:]

print("---People按city排序---")
people_list.sort()
for p in people_list:
    print(p)

print("\n---Teacher按school排序---")
teacher_list.sort()
for t in teacher_list:
    print(t)

# 测试moveto / newschool方法
p1 = People("小明", "Tianjin")
p1.moveto("Chongqing")
print("\nmoveto测试:", p1)

t1 = Teacher("陈老师", "Xi'an", "A中学")
t1.newschool("B中学")
print("newschool测试:", t1)

题目信息

题号:8146
题型:简答题
知识点:Python
难度:普通