1、自定义学生类Student, 成员包含:实例属性sno、sname、age,类属性count; 实例方法:show()用于显示sno、sname 、age的信息;类方法 classAddCount()实现count属性加1;静态 方法staticShowcount()显示当前count 值。要求属性全部为私有,完成下列问 颢• (1) 创建两个Student对象,分别 访问上述成员方法,同时用类名访问 上述成员方法,并输出结果。 (2)为Student对象动态增加新成员性别sex和方法setGrade()获取学生年级,导入types模块,调用 MethodType () 方法。 (3) 在类外部访问sno私有实例 厲性 (4) 我们知道,若在类外部通过 对象尝试修改age值是允许的,但是直接修改属性值可能带来一些问题。 例如,可能直接设置成不合法的值,如age =-10。所以,为了避免客户 端直接修改属性的问题,请在类中提 供get()方法返回age的值,以及set( )方法设置age的新值。新age>0时,允许设置为新值,新age<=0时,提示设置年龄不合法。
时间: 2024-02-23 19:00:34 浏览: 207
定义一个学生类(Student),要求: (1)初始化数据成员数据成员(_Sno,_Sname,_Sage); (2)通过属性装饰器定义数据成员(Sno,Sname,Sage); (3)定义特殊方法
好的,以下是代码实现:
```python
import types
class Student:
__count = 0 # 私有类属性
def __init__(self, sno, sname, age):
self.__sno = sno # 私有实例属性
self.__sname = sname
self.__age = age
Student.__count += 1
def show(self):
print("学号:{},姓名:{},年龄:{}".format(self.__sno, self.__sname, self.__age))
@classmethod
def classAddCount(cls):
cls.__count += 1
@staticmethod
def staticShowcount():
print("当前count值为:{}".format(Student.__count))
# 创建两个对象并访问成员方法
stu1 = Student("001", "Tom", 18)
stu1.show()
Student.classAddCount()
Student.staticShowcount()
stu2 = Student("002", "Jerry", 20)
stu2.show()
Student.classAddCount()
Student.staticShowcount()
# 为Student对象动态增加新成员性别sex和方法setGrade()
stu1.sex = "男"
def setGrade(self, grade):
self.grade = grade
stu1.setGrade = types.MethodType(setGrade, stu1)
stu1.setGrade("大一")
print(stu1.sex, stu1.grade)
# 在类外部访问私有实例属性__sno
# print(stu1.__sno) # 报错,无法访问私有属性
# 提供get()和set()方法实现对age属性的操作
def getAge(self):
return self.__age
def setAge(self, age):
if age > 0:
self.__age = age
else:
print("设置年龄不合法")
stu1.getAge = types.MethodType(getAge, stu1)
stu1.setAge = types.MethodType(setAge, stu1)
print(stu1.getAge())
stu1.setAge(21)
print(stu1.getAge())
stu1.setAge(-10) # 输出“设置年龄不合法”
阅读全文