创建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