Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析

本文实例讲述了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,如果操作涉及对象的内容,需要手动传入


类方法:

  • 使用@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会把一个方法变成一个属性
  • 为什么会有属性方法

现有需求:我输入因数,你就会打印出我要的计算结果

用变量来实现:

缺点:无法约束赋值,假如我要限制不能输入非数字【实际上,如果要做这样的约束,就要建立一个函数,这实际上与属性方法相同,而如果在my_sum里面检测的话,就比建立一个函数还要麻烦了】

用属性方法来实现:

  • 代码:

解释:

  • @property用于获取;@setter用于赋值传参;@deleter用于删除属性,并不影响其他与当前@property无关的函数
  • 要想他们三个关联起来,函数名必须相同,且前缀是@property修饰的函数的名

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数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

时间: 2020-03-23

深入解析python中的实例方法、类方法和静态方法

1.实例方法/对象方法 实例方法或者叫对象方法,指的是我们在类中定义的普通方法. 只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身 2.静态方法 (1).格式:在方法上面添加 @staticmethod (2).参数:静态方法可以有参数也可以无参数 (3).应用场景:一般用于和类对象以及实例对象无关的代码. (4).使用方式: 类名.类方法名(或者对象名.类方法名). 定义一个静态方法 class Game: @staticmethod def menu(): prin

Python实例方法、类方法、静态方法的区别与作用详解

本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义和调用的.(PS:实例对象的权限最大.) 实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为"self",通过它来传递实例的属性和方法(也可以传类的属性和方法): 调用:只能由实例

python的类方法和静态方法

本文实例讲述了python的类方法和静态方法.分享给大家供大家参考.具体分析如下: python没有和C++中static关键字,它的静态方法是怎样的呢?还有其它语言中少有的类方法又是神马? python中实现静态方法和类方法都是依赖于python的修饰器来实现的. 复制代码 代码如下: class MyClass:       def  method(self):            print("method")       @staticmethod     def  stat

python中的实例方法、静态方法、类方法、类变量和实例变量浅析

注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: 复制代码 代码如下: class Foo:    def __init__(self, name):        self.name = name    def hi(self):        print self.name if __name__ == '__main__':    foo01 = Foo('letian')    foo01.hi()    print type(Foo)    p

Python 面向对象静态方法、类方法、属性方法知识点小结

本文实例讲述了Python 面向对象静态方法.类方法.属性方法知识点.分享给大家供大家参考,具体如下: (1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__(self,name): self.name = name @staticmethod #实际上跟类没什么关系了 def eat(self): print("%s is eating %s&quo

浅谈python中的实例方法、类方法和静态方法

在学习python代码时,看到有的类的方法中第一参数是cls,有的是self,经过了解得知,python并没有对类中方法的第一个参数名字做限制,可以是self,也可以是cls,不过根据人们的惯用用法,self一般是在实例方法中使用,而cls则一般在类方法中使用,在静态方法中则不需要使用一个默认参数.在下面的代码中,InstanceMethod类的方法中,第一个参数是默认的self,在这里可以把self换成任何名字来表示,不会有任何影响.在类调用的时候,需要满足参数的个数要求(参数中含有*args

Python3.0中普通方法、类方法和静态方法的比较

一.语法区别 刚接触Python中的面向对象,对于类方法和静态方法难以区分,通过查找知乎.CSDN论坛,废了好大的劲思路才逐渐明朗,所以就总结顺便分享一下. 首先开始编辑代码 # 普通方法.类方法.静态方法的比较 # 普通方法.类方法.静态方法的比较 class Test: # 定义类Test的属性 name = 'python' content = '人生苦短,我用python!' def normal_method(self): # 普通方法访问类Text的属性 print(self.con

python并发编程 Process对象的其他属性方法join方法详解

一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一: 在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源. 这种是没有join方法 情况二: 如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行, 就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是

Python面向对象之静态属性、类方法与静态方法分析

本文实例讲述了Python面向对象之静态属性.类方法与静态方法.分享给大家供大家参考,具体如下: 1. 静态属性:在函数前加@property,将函数逻辑"封装"成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用对象和类的属性的. # -*- coding:utf-8 -*- class Room: def __init__(self,name,owner,width,length): self.name = name self.owner = owner self.

便捷提取python导入包的属性方法

很多时候我们都需要了解下python中导入包的属性方法信息,当然dir 是最便捷的了,不过如果想知道特定的,例如以_ 开头的属性,需要写个筛选,以下是实现筛选的两种方式,主要是练习下yield from 的使用,可以聊作参考~ #法1 def e(start='_', module='os'): module = __import__(module) def gen_attr(): for attr in dir(module): if attr.startswith(start): yield

Python导入oracle数据的方法

本文实例讲述了Python导入oracle数据的方法.分享给大家供大家参考.具体如下: import cx_Oracle dns_tns=cx_Oracle.makedsn("192.168.0.288",1521,"skynet") print dns_tns con = cx_Oracle.connect('alibaba', 'zhimakamen', dns_tns) cur=con.cursor() for index,line in enumerate(

在linux系统下安装python librtmp包的实现方法

安装librtmp包需要依赖环境较多,机器上已经安装了python2.7版本,安装librtmp包之前需要先安装依赖环境. 1.安装gcc和依赖包 yum install gcc* python-devel libffi-dev* -y 2.安装librtmp 从git上下载源码: git clone git://git.ffmpeg.org/rtmpdump cd rtmpdump/librtmp/ make && make install 3.安装setuptools wget -S

Python依赖包整体迁移方法详解

1.新建site-packages目录,进入到site-packages目录下: 2.在site-packages目录下执行pip freeze >requirements.txt: 3.查看requirements.txt,可以看到当前机器的python所有依赖包已生成列表 ​ 4.在当前目录下执行pip download -rrequirements.txt,可以看到pip开始下载依赖包列表中的所有依赖包 ​ 5.等待下载完成后,可以看到当前目录下已经有了依赖包文件 ​ 6.将site-pa

python导入pandas具体步骤方法

Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持. Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis).panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型. 数据结构: Series:一维数组,与Numpy中的一维array类似.二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和

Python模块/包/库安装的六种方法及区别

方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 方法2: 多文件模块,文件内有setup.py文件 在官网或者GitHub上下载模块包(压缩文件zip或tar.gz),解压缩之后,文件夹下会有setup.py文件,从命令行窗口进入该文件夹,然后输入命令: python setup.py install 方法3:easy_install 方式 先下载 ez_setup.py,运行 python ez_setup 进行easy_install工具的安装,之后就可以使用easy

python搜索包的路径的实现方法

查看python搜索包的路径的实现方法: python搜索包的路径存储在sys.path下 查看方法: import sys sys.path 临时添加python搜索包路径的方法: 方法1:(先进入python) import sys sys.path.append('路径') (这种方式仅对当前python有效) 方法2: export PYTHONPATH=路径 (这种方式对所有的python有效) 永久写入sys.path的方法: 方法1: 在已有的sys.path搜索路径下添加 .pt

对Golang import 导入包语法详解

package 的导入语法 写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt.Println( "我爱北京天安门" ) fmt 是 Go 的标准库,它其实是去 GOROOT 下去加载该模块,当然 Go 的 import 还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" // 当前文件同一目录的 model 目录

Golang import 导入包语法及一些特殊用法详解

package 的导入语法 写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt.Println( "我爱我们" ) fmt 是 Go 的标准库,它其实是去 GOROOT 下去加载该模块,当然 Go 的 import 还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" // 当前文件同一目录的 model 目录,但是

python导包的几种方法(自定义包的生成以及导入详解)

python是一门灵活的语言,也可以说python是一门胶水语言,顾名思义,就是其可以导入各类的包,python的包可以说是所有语言中最多的.当然导入包大部分是为了更快捷,更方便,效率更高.对于刚入门的python爱好者来说最初接触的应该是import直接导入包的方式,例如 import time,就是导入了python的time包,这个包中的方法可以处理大部分我们项目中遇到的关于时间的问题. 下面我会详细介绍几种导入包的方式(在开发过程中绝对够用)以及怎样把其他文件夹中的python模块生成我