1. 类属性和类方法
类属性:针对类对象定义的属性,使用赋值语句在class关键字下可以定义类属性。
类方法:针对类对象定义的方法,在类方法内部可以直接访问类属性或者调用其他的类方法。
class Toy(object):
# 使用赋值语句 记录所有的玩具数量
count = 0
def __init__(self,name):
self.name = name
# 让类属性+1
Toy.count += 1
@classmethod
def show_toy_count(cls):
print('玩具对象的数量 %d' %(cls.count))
# 创建玩具对象
toy1 = Toy('乐高')
toy2 = Toy('泰迪熊')
#调用类方法
Toy.show_toy_count()
2. 静态方法
静态方法:通过类名调用静态方法,不需要创建对象,直接就可以调用。
class Cat(object):
@staticmethod
def call():
print('喵喵~')
Cat.call()
3. 私有属性和私有方法
class Student(object):
def __init__(self,name,score):
# 前面带两个下划线表示对变量进行私有化
# 外部不能随便的访问和更改
self.__name = name
self.__score = score
def get_grand(self):
print('my name is %s,my grade is %d' %(self.__name,self.__score))
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_name(self,name):
if isinstance(name,str):
self.__name = name
else:
raise ValueError('请输入正确的名字')
def set_score(self,score):
if isinstance(score,int):
self.__score = score
else:
raise ValueError('请输入正确的成绩')
tom = Student('Tom',89)
print(tom.get_name())
print(tom.get_score())
tom.__name = 'new_name' # 这样做只是给对象添加了__name的属性 而不是修改私有属性的值
tom.set_name('tommm')
tom.set_score(99)
print(tom.get_name())
print(tom.get_score())