在原来写的student类、teacher类和people类的基础上,将student类和teacher类改成people类的子类。并尝试将成员变量或方法设置成不同的访问权限(public、private、protected、友好)。
时间: 2024-05-14 17:18:38 浏览: 29
设计一个Person类,有Person类派生一个Student类和一个Teacher类
好的,我可以给你示范一下。
```python
class People:
def __init__(self, name, age):
self.name = name
self.age = age
self._gender = None # 友好访问权限,只能在类内部和子类中访问
def say_hello(self):
print(f"Hi, I'm {self.name}. I'm {self.age} years old.")
def _get_gender(self): # 友好访问权限,只能在类内部和子类中访问
return self._gender
def set_gender(self, gender): # 公共访问权限,可以在类的外部直接访问
self._gender = gender
class Student(People):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
self.__score = None # 私有访问权限,只能在类内部访问
def say_hello(self):
super().say_hello()
print(f"I'm a student in {self.grade} grade.")
def set_score(self, score):
self.__score = score
def get_score(self):
return self.__score
class Teacher(People):
def __init__(self, name, age, subject):
super().__init__(name, age)
self.subject = subject
self.salary = None # 默认是公共访问权限
def say_hello(self):
super().say_hello()
print(f"I'm a teacher of {self.subject}.")
def set_salary(self, salary):
self.salary = salary
if __name__ == '__main__':
p = People("Tom", 20)
p.say_hello()
p.set_gender("male")
print(p._get_gender())
s = Student("Jerry", 15, 9)
s.say_hello()
s.set_score(90)
print(s.get_score())
t = Teacher("Kate", 35, "Math")
t.say_hello()
t.set_salary(5000)
print(t.salary)
```
在上面的代码中,我们将`Student`和`Teacher`类都改为了`People`类的子类。同时,我们也演示了不同的访问权限设置:
- `public`:默认的访问权限,可以在类的内部、子类中和类的外部直接访问。
- `private`: 只能在类的内部访问,通过在变量名或方法名前加上`__`来设置为私有访问权限。
- `protected`:只能在类的内部和子类中访问,通过在变量名或方法名前加上`_`来设置为友好访问权限。
注意,在Python中,这些访问权限只是一种约定,而不是强制限制。因此,我们在编写代码时需要遵循这些约定,以便代码更加清晰易懂。
阅读全文