Python 面向对象静态方法、类方法、属性方法知识点小结


Posted in Python onMarch 09, 2020

本文实例讲述了Python 面向对象静态方法、类方法、属性方法知识点。分享给大家供大家参考,具体如下:

(1)静态方法--》-@staticmethod装饰类中方法

只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性

class Dog(object):
  def __init__(self,name):
    self.name = name
  @staticmethod #实际上跟类没什么关系了
  def eat(self):
    print("%s is eating %s" %(self.name,'dd'))
  def talk(self):
    print("%s is talking"% self.name)
d = Dog("Td")
d.eat(d)

(2)类方法-----》  @classmethod装饰类中方法

只能访问类变量,不能访问实例变量

@classmethod
  def eat(self):
    print("%s is eating %s" %(self.name,'dd'))

(3)属性方法----》 @property #attribute装饰类中方法

把一个方法变成一个静态属性

@property #attribute
  def eat(self):
    print("%s is eating %s" %(self.name))
# 调用
Dog("TD").eat

1.需要将一个值传递给eat属性方法-----修改属性值?

存在的问题是变成属性了直接赋值是无法实现的,需要在重新相同的方法,同时将该方法加上@eat.setter进行装饰。

@property   #attribute
  def eat(self):
    print("%s is eating %s" %(self.name,self.__food))
  @eat.setter
  def eat(self,food):
    print("set to food:",food)
    Self.__food=food

2.删除属性---同名方法使用  @eat.deleter修饰

@property   #attribute
  def eat(self):
    print("%s is eating %s" %(self.name,self.__food))
  @eat.deleter
  def eat(self):
    del self.__food

总结:

1. 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法。

2. 类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量。

3. 属性方法的作用就是通过@property把一个方法变成一个静态属性,调用时与调用属性的方式相同。

   3.1 把一个方法变成静态属性的作用:

当某个属性的值是一系列动作后才得到的结果。所以每次调用时,其实它都要经过一系列的动作才返回结果的,但这些动作过程不需要用户关心,用户只关心得到这个属性的值即可,也就是说用户只需要调用这个属性就可以了。

   (1)修改属性值

  将由@proerty装饰器(把一个方法变成一个静态属性)使用@proerty.setter装饰器再装饰一下,此时 你需要写一个新方法(同名), 对这个属性值进行更改。

   (2)删除属性

   #1:将由@proerty装饰器(把一个方法变成一个静态属性)使用@proerty.deleter装饰器再装饰一下,此时 你需要写一个新方法(同名)。

   #2:使用del删除该实例所对应的属性方法(属性) 例如:del 对象.属性

源码学习地址:https://gitee.com/FelixBinCloud/PythonLearn/commit/bad7a51da107bec6b2b2db697318a6935847d208

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python标准日志模块logging的使用方法
Nov 01 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Python快速排序算法实例分析
Nov 29 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
Python unittest生成测试报告过程解析
Sep 08 Python
python微信公众号开发简单流程实现
Mar 09 #Python
Python 面向对象部分知识点小结
Mar 09 #Python
Django跨域资源共享问题(推荐)
Mar 09 #Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 #Python
Python模块相关知识点小结
Mar 09 #Python
Django操作session 的方法
Mar 09 #Python
Python装饰器用法与知识点小结
Mar 09 #Python
You might like
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
smarty表格换行实例
2014/12/15 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
JSON取值前判断
2014/12/23 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Django中的Model操作表的实现
2018/07/24 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
python编写实现抽奖器
2020/09/10 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
Python修改DBF文件指定列
2020/12/19 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
玲玲的画教学反思
2014/02/04 职场文书
更夫岗位责任制
2014/02/11 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
《实心球》教学反思
2016/02/23 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技