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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
python使用7z解压apk包的方法
Apr 18 Python
python实现折半查找和归并排序算法
Apr 14 Python
python编程嵌套函数实例代码
Feb 11 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
python提取xml里面的链接源码详解
Oct 15 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Django修改app名称和数据表迁移方案实现
Sep 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-fpm 参数的深入理解
2013/06/03 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP微商城开源代码实例
2019/03/27 PHP
PHP7 list() 函数修改
2021/03/09 PHP
斜45度寻路实现函数
2009/08/20 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
使用Vue写一个datepicker的示例
2018/01/27 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python实现随机漫步算法
2018/08/27 Python
tensorflow自定义激活函数实例
2020/02/04 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
简历中个人自我评价分享
2014/03/15 职场文书
食品安全责任书
2014/04/15 职场文书
初中生操行评语大全
2014/04/24 职场文书
产品包装策划方案
2014/05/18 职场文书
车辆年检委托书范本
2014/10/14 职场文书
公司经营目标责任书
2015/01/29 职场文书
违纪学生保证书
2015/02/27 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android