classStudent():sum=0#类变量#构造函数 前后都有__双下滑线,不会认为为私有方法def__init__(self,name='crj',age=18):
self.name = name #实例变量
self.age = age #实例变量
self.__score =0#私有成员名称即为_Student__score#self.__class__.sum += 1 #类变量 根据类来计数,类似c++ static定义的变量
self.plus_sum()#类方法 #定义一个实例方法 ,self为对象本身defdo_homework(self):print(self.name+' do home work')#定义一个类方法 cls代表类本身
@classmethoddefplus_sum(cls):
cls.sum+=1print(cls.sum)#定义一个静态方法 无需传入类或者对象相关参数 无法引用实例变量 ,可以引用类变量,很像单纯的函数
@staticmethoddefadd(x,y):print(Student.sum)print('this is a static method')defget_score(self):return self.__score
#通过加 __ 双下滑线的方式 可以标准该方法为私有方法defmarking(self,score):if score<0:print('得分小于零,错误')return
self.__score = score
print('本次{}考试得分{}'.format(self.name,self.__score))
类的继承
classPerson():def__init__(self,name,age):
self.name = name
self.age = age
self.sum=0defget_name(self):print(self.name)defdo_homework(self):print('this is Person homework')#继承父类PersonclassStudent(Person):def__init__(self ,school ,name ,age):
self.school = school
#传递参数给父类 需要主动传递当前这个子类 ,可以采用调用父类__init__的方式#Person.__init__(self ,name ,age)#建议采用的调用父类方法方式,采用 super 关键字,增加代码的兼容性super(Student,self).__init__(name,age)#如果子类方法与父类重名,优先调用子类方法defdo_homework(self):print(self.name +' do home work')#这里可以用super调用父类的方法super().do_homework()
student = Student('文山中学','小狮子',18)#可以访问父类成员]print(student.sum)print(student.name)print(student.age)#可以访问父类方法
student.get_name()#可以通过类方法,传递类对象来进行调用,建议采取直接调用
Student.do_homework(student)
student.do_homework()