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系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
Python实现获取网站PR及百度权重
Jan 21 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
Django实现学员管理系统
Feb 26 Python
基于Python实现用户管理系统
Feb 26 Python
Apache部署Django项目图文详解
Jul 30 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
python实现简易淘宝购物
Nov 22 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
基于python实现可视化生成二维码工具
Jul 08 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
vue filters的使用详解
2018/06/11 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python使用django搭建web开发环境
2017/06/09 Python
PyTorch实现AlexNet示例
2020/01/14 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
会计毕业生求职简历的自我评价
2013/10/20 职场文书
应届护士求职信范文
2014/01/26 职场文书
广告设计应届生求职信
2014/03/01 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android