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检测远程udp端口是否打开的方法
Mar 14 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
对numpy中shape的深入理解
Jun 15 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
一文详述 Python 中的 property 语法
Sep 01 Python
python 实现控制鼠标键盘
Nov 27 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实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
javascript天然的迭代器
2010/10/29 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
用Python实现换行符转换的脚本的教程
2015/04/16 Python
json跨域调用python的方法详解
2017/01/11 Python
Python3计算三角形的面积代码
2017/12/18 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
python 读取文件并替换字段的实例
2018/07/12 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
python map比for循环快在哪
2020/09/21 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
大学自主招生自荐信范文
2014/02/26 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
安全保证书
2015/01/16 职场文书
学生通报表扬范文
2015/05/04 职场文书
2016年母亲节广告语
2016/01/28 职场文书
spring 项目实现限流方法示例
2022/07/15 Java/Android