一、类属性和类方法
1. 类属性:使用赋值语句在class关键字下定义
类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有,内存中只存储一份。第一个对象使用完之后,第二个对象使用时是在第一个对象使用的基础上。
2. 类方法:在类内部可以直接访问类属性或者其他类方法,而不需要实例化对象
class Student(object): #定义类
count = 0 #定义类属性和属性值
def __init__(self,name):
self.name = name
Student.count += 1 #改变类属性的属性值
@classmethod #定义类方法
def Show_Student_count(cls):
print('学生数量为 %d' %(cls.count)) #在类的内部访问当前的类属性
student1 = Student('小明') #实例化对象
student2 = Student('小李')
Student.Show_Student_count() #调用类方法
二、静态方法
静态方法:使用staticmethod关键字来定义的一个类方法,直接可以通过类名来调用方法
在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候,我们就可以把这个方法封装成一个静态方法
class Cat(object):
@staticmethod
def call():
print('喵')
Cat.call()
三、私有方法和私有属性
私有方法:在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的,私有方法方法名由两个下划线开头
私有属性:属性名以两个下划线开始
注意:私有属性和私有方法不能在类的外部调用、属性不能被随意改变
class Women():
def __init__(self,name):
self.name = name
self.__age =18 #私有属性
def __secret(self): #私有方法
print('%s的年龄是%d' %(self.name,self.age))
lily = Women('lily')
print(lily.name) #调用属性
print(lily.__age) #调用私有属性(不允许调用)
lily.secret() #私有方法,在类的外部是不能被调用的
tudent(object):
def __init__(self,name,score):
self.__name = name
self.__score = score
def get_name(self): #普通方法
return self.__name #返回私有属性值
def get_score(self):
return self.__score
def set_score(self,score):
self.__score = score
tom = Student('Tom',89)
tom.set_score(90)
print(tom.get_score())
print(tom.get_name())