天天看点

Python之类属性、类方法、静态方法、私有方法和私有属性

一、类属性和类方法

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()    #调用类方法
           
Python之类属性、类方法、静态方法、私有方法和私有属性

二、静态方法

静态方法:使用staticmethod关键字来定义的一个类方法,直接可以通过类名来调用方法

在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候,我们就可以把这个方法封装成一个静态方法

class Cat(object):

    @staticmethod
    def call():
        print('喵')
Cat.call()
           
Python之类属性、类方法、静态方法、私有方法和私有属性

三、私有方法和私有属性

私有方法:在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的,私有方法方法名由两个下划线开头

私有属性:属性名以两个下划线开始

注意:私有属性和私有方法不能在类的外部调用、属性不能被随意改变

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()       #私有方法,在类的外部是不能被调用的
           
Python之类属性、类方法、静态方法、私有方法和私有属性
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())
           
Python之类属性、类方法、静态方法、私有方法和私有属性