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在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
Python实现二维有序数组查找的方法
Apr 27 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
基于Python打造账号共享浏览器功能
May 30 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
python常用函数与用法示例
Jul 02 Python
python动态视频下载器的实现方法
Sep 16 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
Python中threading库实现线程锁与释放锁
May 17 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数据库操作面向对象的优点
2006/10/09 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Python实现微信好友的数据分析
2019/12/16 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
python语言的优势是什么
2020/06/17 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
会话Bean的种类
2013/11/07 面试题
婚前协议书
2014/04/15 职场文书
统计专业自荐书
2014/07/06 职场文书
单位工资证明范本
2015/06/12 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
母亲节感言
2015/08/03 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript