# 类属性,定义在类里面,方法的外面,不需要实例化类就可以直接使用
# 调用的时候使用 类.属性名
class dog:
name = '哈士奇:汪!' #类属性定义,不需要self关键字,类似于定义变量
def __init__(self):
pass
print(dog.name) #调用类属性,不需要实例化可以直接调用
dog.name = '秋田:汪!' #类属性赋值
print(dog.name)
# **********************************************************
# 类方法,用@classmethod修饰的方法
# 类方法第一个参数必须是cls,内部使用属性用 cls.类属性名 来调用
class cat:
name = '折耳猫,瞄~' #定义类属性
@classmethod #类方法修饰
def set_name(cls,name): #通过类方法的形参修改类属性name的值
cls.name = name
def __init__(self): #在类方法中无法访问普通属性age
self.age = 20
def demo(self): #在类方法中无法访问普通方法demo,只能使用类方法
print('这是一个普通方法')
print(cat.name) #显示类属性的值
cat.name = '小橘猫,瞄~' #修改类属性的值
print(cat.name)
cat.set_name('小白猫,瞄~')
print(cat.name)
# **********************************************************
# 类方法类属性练习
class person:
name = 'tony老师'
@classmethod
def get_name(cls):
return cls.name
def __init__(self):
self.age = 12
def get_age(self):
return self.age
print(person.get_name())
# 把neme的值改为kevin
person.name = 'kevin老师'
# 调用类方法get——name,显示name的值
print(person.get_name())
# 要把普通属性age的值改为20
p = person() #普通属性需要先将类实例化
p.age = 20
# 调用普通方法get——age显示age的值
print(p.get_age())
# **********************************************************
# 普通方法中使用类属性和类方法
# 调用格式 类名.类属性或类方法
class sheep: #定义类
sing = '咩' #定义类属性
@classmethod #定义类方法
def jump(cls):
return cls.sing #类方法内部调用类属性
def run(self): #定义普通方法
sheep.sing = 'mie' #类属性在普通方法中重新赋值
print(sheep.jump()) #普通方法中调用类方法
s = sheep()
s.run()
# **********************************************************
# 统计类的实例化次数
class demo:
index = 0
@classmethod
def count(cls):
return cls.index
def __init__(self): #实例化的时候调用
demo.index = demo.index + 1 #每次调用index自动+1
d = demo()
d = demo()
d = demo()
d = demo()
d = demo()
print(d.count()) #结果为5
# **********************************************************
#静态方法,使用@staticmethod定义,不需要实例化
# 不能访问类中的其他成员,主要解决方法重名的问题
class dog:
@staticmethod #定义静态方法
def run():
print('跑步')
dog.run() #调用静态方法