Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析


Posted in Python onMarch 23, 2020

本文实例讲述了Python面向对象程序设计之静态方法、类方法、属性方法原理与用法。分享给大家供大家参考,具体如下:

前言:认为方法与函数同意义,由于这里使用method,所以称为方法


静态方法:

  • 使用@staticmethod来定义静态方法。
  • 静态方法:类和实例都可以调用的方法,实际上跟类没什么关系了,对于这种不太相关的就使用静态方法【用实例和类调用没有区别】
class Dog(object):
  def __init__(self,name):
    self.name=name
  def talk(self):
    print("%s is talking"%self.name)
  @staticmethod
  def eat(self,food):##
    print("%s is eating %s"%(self.name,food))

  @staticmethod
  def bulk(): ##如果不涉及实例变量的内容,可以不传self
    print("wang wang!")

d=Dog("haha")
d.talk()
Dog.eat(d,"baozi")
d.eat(d,"mianbao")
d.bulk()
Dog.bulk()

注:由于不太相关,所以不会自动传self,如果操作涉及对象的内容,需要手动传入

Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析


类方法:

  • 使用@classmethod来定义类方法
  • 类方法只能访问类变量,不能访问实例变量
  • 如果涉及类变量比较多,而涉及实例变量比较少的话,使用类方法
class Dog(object):
  name="haha"
  def __init__(self,name):
    self.name=name

  @classmethod
  def eat(self):
    print(self)# <class '__main__.Dog'> 说明self是一个类
    print("%s is eating "%self.name)#所以只会调用类中的name

d=Dog("aotuman")
d.eat()##haha is eating
Dog.eat()##haha is eating
d2=Dog("huluwa")
d2.eat()

注:类方法中的self是一个类,因此才会只访问类变量


属性方法:

  • @property会把一个方法变成一个属性
  • 为什么会有属性方法

现有需求:我输入因数,你就会打印出我要的计算结果

用变量来实现:

Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析

缺点:无法约束赋值,假如我要限制不能输入非数字【实际上,如果要做这样的约束,就要建立一个函数,这实际上与属性方法相同,而如果在my_sum里面检测的话,就比建立一个函数还要麻烦了】

用属性方法来实现:

Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析

  • 代码:

解释:

  • @property用于获取;@setter用于赋值传参;@deleter用于删除属性,并不影响其他与当前@property无关的函数
  • 要想他们三个关联起来,函数名必须相同,且前缀是@property修饰的函数的名

Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析

class calc:
  @property
  def my_sum(self):
    print(self.one+self.two)
  @my_sum.setter
  def my_sum(self,l):
    if isinstance(l[0],int)&isinstance(l[1],int):
      self.one=l[0]
      self.two=l[1]
    else:
      print("no int")
  @my_sum.deleter
  def my_sum(self):
    print("del done")
    del self.one,self.two
c=calc()
c.my_sum=[1,2]
c.my_sum
del c.my_sum

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

Python 相关文章推荐
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
django的csrf实现过程详解
Jul 26 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Python字典实现伪切片功能
Oct 28 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 Python
Python3 pickle对象串行化代码实例解析
Mar 23 #Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 #Python
Python3 shelve对象持久存储原理详解
Mar 23 #Python
python新式类和经典类的区别实例分析
Mar 23 #Python
Python count函数使用方法实例解析
Mar 23 #Python
使用python实现飞机大战游戏
Mar 23 #Python
如何在Django中使用聚合的实现示例
Mar 23 #Python
You might like
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP 数组入门教程小结
2009/05/20 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
vue实现登录拦截
2020/06/29 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
python静态方法实例
2015/01/14 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python使用剪切板的方法
2017/06/06 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
室内设计自我鉴定
2013/10/15 职场文书
求职意向书
2014/04/01 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书