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正则表达式 re模块使用说明
May 19 Python
浅谈Python程序与C++程序的联合使用
Apr 07 Python
python 网络爬虫初级实现代码
Feb 27 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Python数据分析之获取双色球历史信息的方法示例
Feb 03 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
浅谈Python 参数与变量
Jun 20 Python
python批量生成条形码的示例
Oct 10 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 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 google或baidu分页代码
2009/11/26 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
PHP时间函数使用详解
2019/03/21 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python对象转换为json的方法步骤
2019/04/25 Python
python生成随机红包的实例写法
2019/09/02 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
python实现计算器简易版
2020/12/17 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
幼儿园门卫制度
2014/01/29 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
医学生求职自荐书
2014/06/12 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
会计工作总结范文2014
2014/12/23 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
致运动员的广播稿
2015/08/19 职场文书