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实现巡检系统(solaris)示例
Apr 02 Python
python中urllib模块用法实例详解
Nov 19 Python
python使用nntp读取新闻组内容的方法
May 08 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
pandas DataFrame索引行列的实现
Jun 04 Python
python代码如何实现余弦相似性计算
Feb 09 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php在线代理转向代码
2012/05/05 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
列表内容的选择
2006/06/30 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
简单学习vue指令directive
2016/11/03 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
OpenCV图像颜色反转算法详解
2019/05/13 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
几个人围成一圈的问题
2013/09/26 面试题
书香校园活动方案
2014/02/28 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
会议主持词通用版
2019/04/02 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
MySQL约束超详解
2021/09/04 MySQL