关于#python#的问题:创建Person类,Teacher类,Student类,重写和多态2.实现有参构造函数的显示定义3.实现私有成员的类外调用

创建Person类,Teacher类,Student类,需求如下:
1.实现继承,重写和多态
2.实现有参构造函数的显示定义
3.实现私有成员的类外调用

马上写出来 简单。代码如下:

class Person:
    __year = 2023  # 定义私有成员
    def __init__(self,name):#定义有参数的构造函数
        self.name = name


    def sayHello(self,people):
        people.sayHello()

    def getYear(self):#类的私有成员不能在类外直接调用,可以像这样写成方法
        return self.__year

class Teacher(Person):#继承Person

    def sayHello(self):#方法重写
        print('Hello,I am a Teacher,My name is '+self.name)


class Student(Person):#继承Person

    def sayHello(self):#方法重写
        print('Hello,I am a Student,My name is '+self.name)

stu = Student('小明')
tea = Teacher('刘老师')
#调用类中的方法
stu.sayHello()
tea.sayHello()

#调用类的私有成员
print(stu.getYear())

#多态的使用,虽然是Person类,但是sayHello方法会根据传入的对象类型,自动调用相应类里面的方法
person = Person('')
person.sayHello(stu)
person.sayHello(tea)


class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def show_info(self):
        print("Name:", self.__name)
        print("Age:", self.__age)

    def speak(self):
        print("Person speaks")


class Teacher(Person):
    def __init__(self, name, age, subject):
        super().__init__(name, age)
        self.__subject = subject

    def show_info(self):
        super().show_info()
        print("Subject:", self.__subject)

    def speak(self):
        print("Teacher speaks")


class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.__grade = grade

    def show_info(self):
        super().show_info()
        print("Grade:", self.__grade)

    def speak(self):
        print("Student speaks")


# 测试代码
p = Person("Tom", 30)
p.show_info()
# 输出:Name: Tom  Age: 30
p.speak()
# 输出:Person speaks

t = Teacher("Alice", 35, "Math")
t.show_info()
# 输出:Name: Alice  Age: 35  Subject: Math
t.speak()
# 输出:Teacher speaks

s = Student("Bob", 20, 3)
s.show_info()
# 输出:Name: Bob  Age: 20  Grade: 3
s.speak()
# 输出:Student speaks

# 私有成员的类外调用
print(t._Person__name)
# 输出:Alice
print(s._Person__age)
# 输出:20