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

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

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

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

  执行结果如图

还有一个property

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

 结果如图

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

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

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

  结果如下图

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

Python面相对象之类里面常用的装饰器(3)的更多相关文章

  1. python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器

    1. is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同 == 比较的是两个对象的内容是否相等 2. with语句时用于对try except finally 的优 ...

  2. python 类中的某个函数作为装饰器

    在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return ...

  3. Python 闭包、迭代器、生成器、装饰器

    Python 闭包.迭代器.生成器.装饰器 一.闭包 闭包:闭包就是内层函数对外层函数局部变量的引用. def func(): a = "哈哈" def func2(): prin ...

  4. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  5. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  6. python关于函数调用作为参数的说明&&装饰器

    python关于函数调用作为参数的说明&&装饰器 简单的: 先看代码: def out(): print('out') def inner(): return 'inner' retu ...

  7. python面相对象进阶

    1. 类的成员 python 类的成员有三种:字段.方法.属性 字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段 属于对象,只有对象创建 ...

  8. Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器

    今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...

  9. python 基础——常用日志装饰器

    from functools import wraps class logit(): def __init__(self, logfile='out.log'): self.log = logfile ...

随机推荐

  1. cms-详细页面-3

    1.设置上一条.下一条数据 2.使用昌言插件 3.点击链接帖子的访问数加一 1.在mapper中设置分页: <?xml version="1.0" encoding=&quo ...

  2. 如何在SAP Cloud for Customer自定义BO中创建访问控制

    文章作者: Yi 已获得Yi的转载许可. 访问控制方式和使用注意事项 1. C4C中的访问控制有两种方式 RelevantForAccessControl AccessControlContext 2 ...

  3. log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?

    http://www.cnblogs.com/gredswsh/p/log4j_xml_properties.html 请问:log4j.properties中的这句话“log4j.logger.or ...

  4. 浅谈前端性能优化(二)——对HTTP传输进行压缩

    1.前端性能优化的一点: 对js.css.图片等进行压缩,尽可能减小文件的大小,减少文件下载的时间,从而减少网页响应的时间. 2.前端性能优化的另一点: 对HTTP传输进行压缩,即在js,css.图片 ...

  5. fdisk - Linux分区表操作工具软件

    总览 fdisk [-u]设备名 fdisk -l [-u] [设备名 ...] fdisk -s分区 ... fdisk -v 描述 硬盘可以被分成一个或多个逻辑磁盘,称为 分区. 这些分区信息都存 ...

  6. 已解决: idea创建并部署SpringMVC项目时 报错 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    用IDEA创建并运行SpringMVC项目时,最初发现没有Servlet包,这个问题已在上篇解决,然而当我们尝试去运行此时的SpringMVC项目时,发现仍然有错误.ClassNotFoundExce ...

  7. lrzsz包中的rz和sz命令

    安装包:lrzsz rz命令:将物理机文件复制到虚拟机 sz命令:将虚拟机文件复制到物理机

  8. python 使用requests 请求 https 接口 ,取消警告waring

    response = requests.request("POST", url, timeout=20, data=payload, headers=headers, proxie ...

  9. 二十二、MySQL 正则表达式

    MySQL 正则表达式 在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配. MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正 ...

  10. 09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据,返回字符串

    cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给dat ...