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安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
Python 文字识别
May 11 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
js Event对象的5种坐标
2011/09/12 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
Python编程之序列操作实例详解
2017/07/22 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python调用支付宝支付接口流程
2019/08/15 Python
Python 复平面绘图实例
2019/11/21 Python
python实现拼接图片
2020/03/23 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
给学校的建议书范文
2014/05/15 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python