# 补充类方法:
class Preson():
__age = 18 # 这是私有的写法,就是为了不把某些东西暴露给外界,外界无法访问和操作
def show(self):
print('-------->', Preson.__age)
@classmethod
def test(cls):
cls.__age = 20
print('------->类方法')
@classmethod
def show_age(cls):
print('修改后的年龄是', cls.__age)
@staticmethod
def test1():
# print(Preson.__age) 这种可以,虽然它没有cls,但是可以写上类名
# print(self.name) 这种不行,self不能出现
pass
# print(Preson.__age) #这样写的话 会有阴影,因为已经被私有了起来了
# 这边有一个问题就是必须要使用类方法才会改,因为类方法不同于__init__,它需要一个启动
Preson.test()
Preson.show_age()
# -------------------------------------------------------------------------------
'''
静态方法:很类似类方法,依赖装饰器
1.装饰器 @staticmethod
@staticmethod
def test1(): 并没有参数
pass
2.它依赖于类名 和classmethod的区别就是没有cls,然后装饰器的名字不一样
3.无需带任何参数的(self,cls)
4.它的里面也只能访问类的属性和方法,对象的是不行的,无法访问的
5.同类方法,在创建class类的时候,它就会生成了。创建时机和类是一样的
总结类方法和静态方法:
不同之处:
1.装饰器的名字不同 @classmethod @staticmethod
2.参数不一样,类方法有参数的,静态方法是没参数的
相同之出:
1.只能访问类的方法和属性
2.都可以在没有创建对象之前进行使用
3.都可以通过类名进行调用,但是@classmethod 可以用cls来调用
普通方法:
1.没有装饰器
2.永远要依赖于对象,也就是说它的创建的时间是在有对象之后才会产生的
3.只有创建的对象才可以去调用你的普通方法
'''