zoukankan      html  css  js  c++  java
  • Python面相对象之类里面常用的装饰器(3)

    在类里面,可以设置类的全局变量,也就是静态字段,让实例化的所有对都具有该属性

    class god:
        country = 'china'#这个字段在类里面保存,只有一份,叫静态字段,表示每个对象具有的属性
    
    
        def __init__(self,name):
    
            self.name =name#普通字段,保存在实例化之后的对象中
    
    
    
        def shit(self):#普通方法,保存在类中,实例化之后的对象也可以通过反射找到类方法,如hasattr
            print('shit')
        def she(self):
            print('黄赌毒')
    
    
    obj = god('Jay')
    print(obj.country)
    

      类里面有几个常用的装饰器

    class god:
        country = 'china'
    
        def __init__(self,name):
            self.name =name
        @classmethod#这个是类方法,保存在类里面,通过类直接调用
        def xxxx(cls):#必须要有cls参数,全称class,方法被调用时候类名被当做cls传进去,相对于静态方法的特殊情况,就是多了一个参数
            print('xxxxx',cls)
        def shit(self):
            print('shit')
        @staticmethod#这是静态方法,装饰类里面的方法,使该方法变为静态方法,没有了self,保存于类里面
        def she():
            print('黄赌毒')
    
    god.she()#静态方法直接使用类调用,一般静态方法都使用类访问
    god.xxxx()
    print(god)
    obj = god('Jay')
    obj.she()#实例也可以直接调用,但不被建议
    

      执行结果如图

    还有一个property

    class god:
        country = 'china'
    
        def __init__(self,name):
            self.name =name
    
    
        @property#原来通过实例的调用(加括号)才能访问,现在通过字段就能访问了,实际是将方法伪造成了字段
        def shit(self):#这个特性不能再传参数了
            return '%s shit' % self.name
    
    obj = god('Jay')
    r1=obj.shit
    print(r1)
    

     结果如图

    我们也可以用shit.setter装饰器更改获得的字段

    如下代码,不过这些方法很少用

    class god:
        country = 'china'
    
        def __init__(self,name):
            self.name =name
    
    
        @property#原来通过实例的调用(加括号)才能访问,现在通过字段就能访问了,实际是将方法伪造成了字段
        def shit(self):#这个特性不能再传参数了
            return '%s shit' % self.name
        @shit.setter#这个方法用于接收传回来的参数,进行一些更改,专门用于设置
        def shit(self,value):
            print(value)
            self.name=value#更改属性
    
    obj = god('Jay')
    print(obj.shit)
    obj.shit='b'
    print(obj.name)
    

      结果如下图

     概括起来,类里面主要结果如下

  • 相关阅读:
    C++字节对齐与位域
    使用GDB调试将符号表与程序分离后的可执行文件
    在windows上编译apr库
    使用samba共享文件夹,提供给window访问
    Linux常用命令
    使用VS2015编译xlslib库
    VS资源收藏<持续更新中>
    使用Visual Studio 2017 C++17模块(module)特性
    RMAN中format的参数
    C#的Process类的一些用法
  • 原文地址:https://www.cnblogs.com/xiaobeibei26/p/6436380.html
Copyright © 2011-2022 走看看