thtl

导航

类的静态属性,静态方法,类方法

类的静态属性

啥叫类的静态属性,欸,天机不想泄露给你们这些凡夫俗子 -------------------- 静态属性就是将一个函数包装起来,让调用者看起来就像是在调用一个类属性

 

#一般而言,我们写类的函数都是以下方法来写的对吧
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参数,毕竟对象是类的实例化嘛,类方法自然也可以通过对象直接调用,原理就是参考属性字典的查找
          //顺序,但是-----有这样的语法却没有这样做的必要,直接通过类名来调用是最规范的

结果
类的一些东西:类的数据属性
类的一些东西:类的数据属性

 

posted on 2018-08-31 19:25  thtl  阅读(110)  评论(0编辑  收藏  举报