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中的pydoc模块和distutils模块
Apr 13 Python
Python三级目录展示的实现方法
Sep 28 Python
详解Python_shutil模块
Mar 15 Python
一行python实现树形结构的方法
Aug 09 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
python数据化运营的重要意义
Nov 25 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
pycharm配置QtDesigner的超详细方法
Jan 25 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
JavaScript的目的分析
2007/01/05 Javascript
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
关于vue里页面的缓存详解
2019/11/04 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Django实现学员管理系统
2019/02/26 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
司马光教学反思
2014/02/01 职场文书
对孩子的寄语
2014/04/09 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
党章培训心得体会
2014/09/04 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang