类属性:
写在init外面,定义时要给它赋值,外面定义一个类时,类属性也在类相继开辟一个地址,类属性是公共的,
无论哪个子类或者本身类修改属性值,他的值都可以改变,这和对象属性不同,
举个例子来说,类属性就是一个家庭的资金,而对象属性就是家庭里某个人的钱,每个人都可以用家庭的资金,每用一点就改变金钱的值,
一个人使用了家庭的钱后另一个人跟着去使用的话,那时候的钱就是前面一个人使用后还剩的钱数,而家庭里每个人的钱是互不干预的,
不管你用自己的钱多少,和其他人没有任何关系,其他人的钱不会改变。
类方法:
方法前面加@classmethod,方法里面的参数不是self,而是cls,cls是不定的,这个参数名可以随便写,类方法可以调用自己的类属性,
这里修改了类属性的值之后,后面再去输出类属性的值又将会改变。
静态方法:
前面加@staticmethod,用处;当有些东西写在一个类里面不合适时就可以写在静态方法内,无需参数,和类没有关系,
也和对象没有关系,可通过类和对象调用
class test: # 类属性, uname='Gscsd' def __init__(self,name): # 这里不再是对象属性,而是类属性,self改成了test test.uname=name def cuse(self): print('%s'%self.uname) # 类方法前面要加这个,而且函数里面参数不再是self,而是其他,可写为cls @classmethod def cmethod(cls): cls.uname='万古至尊' print('这是一个类方法') @staticmethod def smethod(): # 用处;当有些东西写在一个类里面不合适时就可以写在静态方法内, # 无需参数,也不依靠类,可通过类和对象调用 print('这是一个静态方法') # 这里可以直接输,不用新建对象也可以,因为他是类属性和对象 test.cmethod() print(test.uname) t=test('李云霄') t.cmethod() # 这里不是类属性,而是对象里面重新开辟出来的对象属性 # t.uname='古飞扬' t.cuse() tt=test('古飞扬') print(test.uname)t.cuse()
》》》这是一个类方法 》》》万古至尊 》》》这是一个类方法 》》》万古至尊 》》》古飞扬 》》》古飞扬