类的静态属性,静态方法,类方法
类的静态属性
啥叫类的静态属性,欸,天机不想泄露给你们这些凡夫俗子 -------------------- 静态属性就是将一个函数包装起来,让调用者看起来就像是在调用一个类属性
#一般而言,我们写类的函数都是以下方法来写的对吧 class test: t1 = '类的数据属性' t = [1,2,3] def __init__(self): self.t2 = '数据属性' def display(self): print(self.t1) ts = test() ts.display() 结果 类的数据属性 但如果换成类的静态属性的话就是一下的风格 class test: t1 = '类的数据属性' t = [1,2,3] def __init__(self): self.t2 = '数据属性' @property //这个关键字就是类的静态属性关键字,它的作用是如果参数只有self,则在调用这个函数时不需要加括号() ,它会自己帮你在底层搞定,在调用者看来,就像 def display(self): //是调用了一个数据属性,当然如果想要完完全全像数据属性,这个函数必须是返回一个东西,而不是像上面的风格一样,直接print() return self.t1 ts = test() print(ts.display) 结果 类的数据属性
类的静态方法
类的静态方法又是啥玩意呢,类的静态方法是类的工具包,可以直接通过类调用也可以直接通过对象调用,类的静态方法是属于类的,在类的属性字典里可以找得到
class test: t1 = '类的数据属性' t = [1,2,3] def __init__(self): self.t2 = '数据属性' def display(a,b): print(a,b) ts = test() # ts.display() test.display(1,2) 结果 1 2
按照这样写的话只可以由类名来调用,不可以通过对象来调用(因为python会将该对象传给该方法的self,但这里没有self变量),所以这就有局限了,然后静态方法就是下面的
那个 class test: t1 = '类的数据属性' t = [1,2,3] def __init__(self): self.t2 = '数据属性' @staticmethod #这样写之后无论通过类名还是对象都可以直接调用这个静态方法,通过类名来调用就不用说了,即使是没有这个装饰器也可以,因为这个装饰器的原因, def test1(a,b):#python无法再将该对象传给这个方法的self变量,所以这里有没有self变量都可以呀 print(a,b) ts = test() ts.test1(1,2) test.test1(1,2) 结果 1 2 1 2
类的方法
类方法就是可以只通过类名来调用,和对象完全无关但对象有权调用
class test: t1 = '类的数据属性' t = [1,2,3] def __init__(self): self.t2 = '数据属性' @classmethod #这个装饰器是可以将类名自动传给参数cls的(cls也是内置的有意义的关键字),如果没有这个装饰器,python顶多就是将对象自动赋给self,绝对不会
def lei_display(cls): #自动把类名赋给某个参数
print('类的一些东西:%s' % cls.t1) test.lei_display()//可以直接类名调用,通过装饰器会自动把类名赋给 cls 参数,这个时候cls就是代指类名 ts = test() ts.lei_display()//也可以通过对象来调用,这个时候是将对象直接赋给cls参数,毕竟对象是类的实例化嘛,类方法自然也可以通过对象直接调用,原理就是参考属性字典的查找
//顺序,但是-----有这样的语法却没有这样做的必要,直接通过类名来调用是最规范的
结果
类的一些东西:类的数据属性
类的一些东西:类的数据属性