定义一个类,及其私有属性和方法并访问成员方法

自定义学生类Student,成员包含:实例属性sno、sname、age,类属性count,实例方法show(用于显示sno、sname、age信息),类方法classAddCount(实现count属性累加1),静态方法staticShowCount(显示当前count值)。要求属性全部为私有。并完成如下问题:

(1)创建两个Student对象,分别访问上述成员方法,同时用类名访问上述成员方法,输 出结果。      

(2)为Student对象动态增加新成员性别sex和方法setGrade(设置学生年级)     

(3)在类外部访问sno私有实例属性     

(4)我们知道,若在类外部通过对象尝试修改age值是允许的,但是直接修改属性值可能带来一些问题。例如,可能直接设置成不合法的值,如age=-10。所以,为了避免客户端直接修改属性的问题,请在类中提供get()方法返回age的值,以及set()方法设置age的新值,age>0时设置成为新值,age<=0时,提示设置年龄不合法。

class Student:

 

    _count = 0

 

    @classmethod

    def classAddCount(cls):

        cls._count += 1

 

    @staticmethod

    def staticShowCount():

        print(Student._count)

 

    def __init__(self):

        pass

    

 

这个很简单的,你自己先写一下。哪里不会再来问

 

class Student:

    __count = 0

    @classmethod
    def classAddCount(cls):
        cls.__count += 1

    @staticmethod
    def staticShowCount():
        print(Student.__count)

    def __init__(self,sno,sname,age):
        self.__sno = sno
        self.__sname = sname
        self.__age = age

    def show(self):
        print(f"sno:{self.__sno}、sname:{self.__sname}、age:{self.__age}")

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, value):
        if isinstance(value, int) and value>0:
            self.__age = value
        else:
            print("设置年龄不合法")

st1 = Student("0005","aaa",19)
st1.age = "vb"
print(st1.age)
st1.age = -1
print(st1.age)
st1.age = 111
print(st1.age)
st1.show()


Student.classAddCount()
Student.classAddCount()
Student.staticShowCount()

 

>>> class Student:
	__count = 0
	def __init__(self, sno, sname, age):
		self.__sno = sno
		self.__sname = sname
		self.__age = age
		self.sex = None
		self.grade = None
	@classmethod
	def classAddCount(cls):
		cls.__count += 1
	@staticmethod
	def staticShowCount():
		print(Student.__conut)
	def setSex(self, sex):
		self.sex = sex
	def setGrade(self, grade):
		self.grade = grade
	def set(self, age):
		if age > 0:
			self.__age = age
		else:
			print('设置年龄不合法')
	def get(self):
		return self.__age

	
>>> a = Student(5, 'Xufive', 10)
>>> b = Student(8, 'ChenIrene', 9)

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y