类属性
- 类属性,就是所有的对象所共有的属性,在对其修改够,所有对象的类属性放生了改变
- 实例属性,每个对象所独有的,对象被创建后,添加修改实例属性,对其他对象不产生影响
class Chinese(object):
color = 'yellow'
def __init__(self, name):
self.name = name
c1 = Chinese('xiaohong')
c2 = Chinese('xiaohuang')
c3 = Chinese('xiaolv')
print(c1.color)
print(c2.color)
print(c3.color)
Chinese.color = 'orange'
print(c1.color)
print(c2.color)
print(c3.color)
class Apple(object):
apple_list = []
def __init__(self):
Apple.apple_list.append(self)
count = 10
def eat(self):
Apple.count -= 1
a1 = Apple()
a2 = Apple()
a3 = Apple()
a4 = Apple()
a1.eat()
a2.eat()
a3.eat()
a4.eat()
print(Apple.count)
print(Apple.apple_list)
类方法
- 如果在方法内部不需要使用实例属性和实例方法,但是需要使用类属性或者类方法我们就定义类方法
- 定义方式:需要在方法上方写@classmethod
- 在类方法中会自动传入cls,这个参数代表的是当前类本身
class Apple(object):
num = 10
def __init__(self):
self.eat_num = 0
def eat(self):
self.eat_num += 1
Apple.num -= 1
@classmethod
def eat_apple_num(cls):
print(f'一共被吃了{10-cls.num}个,还剩{cls.num}个')
Apple.eat_apple_num()
a1 = Apple()
a2 = Apple()
a3 = Apple()
a4 = Apple()
a1.eat()
a2.eat()
a3.eat()
a4.eat()
a4.eat()
Apple.eat_apple_num()
print(a1.eat_num)
print(a2.eat_num)
print(a3.eat_num)
print(a4.eat_num)