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中chr、unichr、ord字符函数之间的对比
Jun 16 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Linux下python3.7.0安装教程
Jul 30 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
django配置app中的静态文件步骤
Mar 27 Python
Python PIL库图片灰化处理
Apr 07 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
python和go语言的区别是什么
Jul 20 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
Python Socket编程详解
Apr 25 Python
聊一聊python常用的编程模块
May 14 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
Search Engine Friendly的URL设计
2006/10/09 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
详解python并发获取snmp信息及性能测试
2017/03/27 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python3大文件解压和基本操作
2017/12/15 Python
python如何实现反向迭代
2018/03/20 Python
Python实现二维数组输出为图片
2018/04/03 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python实现元素等待代码实例
2019/11/11 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
介绍一下Java的安全机制
2012/06/28 面试题
党员自我评价分享
2013/12/13 职场文书
高校十八大报告感想
2014/01/27 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
行政复议答复书
2015/07/01 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技