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中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python实现对csv文件的列的内容读取
Jul 04 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
神经网络相关之基础概念的讲解
Dec 29 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
python复合条件下的字典排序
Dec 18 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
matplotlib设置legend图例代码示例
2017/12/19 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
大学生党课思想汇报
2013/12/29 职场文书
公司营业员的自我评价
2014/03/04 职场文书
小学生家长寄语
2014/04/02 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
httpclient调用远程接口的方法
2022/08/14 Java/Android