Python类方法、实例方法、静态方法和属性方法详解

静态方法(可调类变量、可被实例调用、可被类调用)

1、用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用

2、静态方法名义上归类管理,实际中在静态方法中无法访问类和实例中的任何属性

3、调用时并不需要传递类或者实例。像我们在类外定义的函数,只不过静态方法可以通过类或者实例来调用而已

#实验证明eat静态方法里不能传self对象,因此无法调用实例变量import requests,json
class Dog(object):food='牛肉'name='大黄狗'def __init__(self, name):self.name = name@staticmethoddef eat(self):print('%s eat %s' %(self.name,Dog.food))
d = Dog("拉布拉多")
d.eat()
Dog.eat()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
Traceback (most recent call last):File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 104, in <module>d.eat()
TypeError: eat() missing 1 required positional argument: 'self'Process finished with exit code 1
#实验证明eat静态方法,可由类和实例调用,可使用类变量class Dog(object):food='牛肉'name='大黄狗'def __init__(self, name):self.name = name@staticmethoddef eat(who):print('%s %s eat %s' %(who,Dog.name,Dog.food))
d = Dog("拉布拉多")
d.eat('橙子家')
Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
橙子家 大黄狗 eat 牛肉
橘子家 大黄狗 eat 牛肉Process finished with exit code 0

类方法(可调类变量、可被实例调用、可被类调用)

1、类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

2、通过cls参数传递当前类对象,不需要实例化,直接通过类对象【实例名.方法名】和类对象实例【类名.方法名】访问


实验证明:
通过cls参数传递当前类对象,不需要实例化,直接类名.方法名() 通过类对象和类对象实例访问import requests,json
class Dog(object):food='牛肉'name='大黄狗'def __init__(self, name):self.name = name@classmethoddef eat(cls,who):print('%s %s eat %s' %(who,cls.name,Dog.food))
d = Dog("大白狗")
d.eat('橙子家')
Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
橙子家 大黄狗 eat 牛肉
橘子家 大黄狗 eat 牛肉Process finished with exit code 0
实验证明:
类方法只能访问类变量,不能访问实例变量class Dog(object):food='牛肉'#name='大黄狗'def __init__(self, name):self.name = name@classmethoddef eat(self,who):print('%s %s eat %s' %(who,self.name,Dog.food))
d = Dog("大白狗")
d.eat('橙子家')
Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
Traceback (most recent call last):File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 104, in <module>d.eat('橙子家')File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 102, in eatprint('%s %s eat %s' %(who,self.name,Dog.food))
AttributeError: type object 'Dog' has no attribute 'name'Process finished with exit code 1

类实例方法(可调类变量、可调实例变量、可被实例调用)

1、第一个参数强制为类实例对象self,可以通过这个类实例对象访问类属性self.name,可以通过类实例对象的__class__属性访问类属性__class__.name。

2、类的初始化方法__init__也是实例方法,在实例创建的时候自动调用

实验证明:
实例方法可调用类变量和实例变量class Dog(object):food='牛肉'name='大黄狗'def __init__(self, name):self.name = namedef eat(self,who):  #实例方法print('%s %s eat %s' %(who,self.name,Dog.food))
d = Dog("大白狗")
d.eat('橙子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
橙子家 大白狗 eat 牛肉Process finished with exit code 0

属性方法(可调类变量、可调实例变量、可被实例调用)

1、属性方法,把一个方法变成静态属性,可以调类的实例变量和类变量

给 属性方法赋值class Dog(object):def __init__(self, name):self.name = nameself.__food = None@propertydef eat(self):print('%s eat %s' %(self.name,self.__food))@eat.setterdef eat(self, food):self.__food = food
d = Dog("labuladuo")
d.eat
d.eat = "baozi"
d.eat"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
wang eat None
wang eat baoziProcess finished with exit code 0
属性方法应用场景
比如 ,你想知道一个航班当前的状态,是到达了、延迟了、取消了、还是已经飞走了, 想知道这种状态你必须经历以下几步:1. 连接航空公司API查询2. 对查询结果进行解析 3. 返回结果给你的用户因此这个status属性的值是一系列动作后才得到的结果,所以你每次调用时,其实它都要经过一系列的动作才返回你结果,但这些动作过程不需要用户关心, 用户只需要调用这个属性就可以import requests,json
class Flight(object):def __init__(self,name):self.flight_name = namedef checking_status(self):print("checking flight %s status " % self.flight_name)return  1@propertydef flight_status(self):status = self.checking_status()if status == 0 :print("flight got canceled...")elif status == 1 :print("flight is arrived...")elif status == 2:print("flight has departured already...")else:print("cannot confirm the flight status...,please check later")@flight_status.setterdef flight_status(self,status):print('fight %s has changed status to %s'%(self.flight_name,status))
f = Flight("CA980")
f.flight_status
f.flight_status=2"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
checking flight CA980 status 
flight is arrived...
fight CA980 has changed status to 2Process finished with exit code 0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript部分问题

JavaScript中的相等判断 话题: JavaScript 难度: ⭐ JavaScript中的相等判断有严格判断和带隐式转换的判断两种&#xff1a; 严格判断(strict comparision): 比如&#xff0c;比较的时候不会隐式转换类型&#xff1b;抽象判断(abstract comparasion)&#xff1a;比如&#xff…

【Linux】free命令查询服务器内存信息

Linux的free命令对于很多的Linux运维来说&#xff0c;应该是非常熟悉的了。但作为一个经常使用linux系统的小白来说&#xff0c;我们也需要了解一下free命令。 free 命令显示系统内存的使用情况&#xff0c;包括物理内存、交换内存(swap)和内核缓冲区内存。 free命令的返回结果…

Python类的继承实例

类的继承可以看成对类的属性和方法的重用&#xff0c;能够大大的减少代码量&#xff0c;继承是一种创建新类的方式&#xff0c;在python中&#xff0c;新建的类可以继承一个或多个父类&#xff0c;也就是说在python中支持一个儿子继承多个爹。 通过继承创建的新类为子类或者派…

买第三便宜帽子

度度熊想去商场买一顶帽子&#xff0c;商场里有N顶帽子&#xff0c;有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子&#xff0c;问第三便宜的帽子价格是多少&#xff1f; 输入描述: 首先输入一个正整数N&#xff08;N < 50&#xff09;&#xff0c;接下来输入…

【Linux】linux服务器下的帮助命令总结

在Linux环境中&#xff0c;如果遇到困难&#xff0c;可以使用帮助命令来取得帮助。 常见的帮助命令有&#xff1a;man 命令、help 命令、info 命令。 在介绍这几个命令前&#xff0c;需要先介绍一下内建命令与外部命令&#xff0c;因为有一些查看帮助的工具在内建命令与外建命令…

Python数据驱动模块DDT

一.DDT简介 Data Driven Testing&#xff0c;数据驱动&#xff0c;简单来说就是测试数据的参数化 Python数据驱动模块DDT&#xff0c;包含类的装饰器ddt和两个方法装饰器data&#xff08;直接输入测试数据&#xff09; 通常情况下&#xff0c;data中的数据按照一个参数传递给…

服务器Ubuntu Import Error:cannot import name main

利用Xftp5进入到usr/bin 目录下&#xff0c;找到pip3. 把它拷贝到桌面上&#xff0c;用pycharm打开&#xff0c;进行如下修改&#xff1a; 把下面的三行 from pip import main if __name__ __main__:sys.exit(main())替换为&#xff1a; from pip import __main__ if __name…

【Linux】linux服务器下包管理器

通常Linux应用软件的安装包有三种&#xff1a; 1&#xff09; tar包&#xff0c;如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。 2&#xff09; rpm包&#xff0c;如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。 3&#xff09; dpk…

Python脚本做接口测试,抛弃接口测试工具是否可行?(二)

学习是为了更好的应用&#xff0c;之前做接口测试一直用的postman、fiddler&#xff0c;感觉用工具还是有些局限性&#xff0c;于是想着把学到的python灵活运用到接口测试中&#xff0c;于是就有了以下案例&#xff0c;思考着想用unittest做个简单的接口测试脚本&#xff0c;可…

阿里云服务器部署django项目

ubuntu自带了2.7。想要装3.5并设置为默认python版本。 安装python3.5 sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python3.5 python --version sudo apt-get install python3-pip #装pip3设置python3为默认版本 直接执行这两个…

【Linux】ls命令查看linux目录下的内容

ls 命令是Linux下最常用的命令之一&#xff0c;用于显示指定工作目录下之内容&#xff08;列出目前工作目录所含之文件及子目录)。 本文将介绍其基本的用法和一些典型的用例 Usage: ls [OPTION]... [FILE]... 不输入参数(默认将文件名或目录名称开头为"."的视为隐藏…

ubuntu防火墙操作

教你如何开启/关闭ubuntu防火墙 目录 [隐藏] 1 安装方法2 使用方法3 推荐设置4 详细使用说明安装方法 sudo apt-get install ufw当然&#xff0c;这是有图形界面的(比较简陋)&#xff0c;在新立得里搜索gufw试试…… 使用方法 1 启用 sudo ufw enablesudo ufw default deny …

【Python】hashlib模块实现MD5加密

MD5消息摘要算法&#xff08;英语&#xff1a;MD5 Message-Digest Algorithm&#xff09;&#xff0c;一种被计算机安全领域广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c; 用以…

Python中json和pickle模快dumps()、loads()、dump()、load()序列化和反序列化实例

在python中&#xff0c;序列化可以理解为&#xff1a;把python的对象编码转换为json格式的字符串&#xff0c;反序列化可以理解为&#xff1a;把json格式字符串解码为python数据对象。在python的标准库中&#xff0c;专门提供了json库与pickle库来处理这部分。 用于序列化的两…

计算机编码发展历史和编码方式

编码是信息从一种形式或格式转换为另一种形式的过程&#xff0c;也称为计算机编程语言的代码简称编码。 用预先规定的方法将文字、数字或其它对象编成数码&#xff0c;或将信息、数据转换成规定的电脉冲信号。 编码在电子计算机、电视、遥控和通讯等方面广泛使用。 解码&#x…

解决Error: That port is already in use.

ubuntu系统下&#xff0c;运行一个django项目&#xff0c;即输入python manage.py runserver后&#xff0c;可能出现 Error: That port is already in use.的错误。 即端口号已经被占用,说明servr已经在运行了(也有可能在后台运行) 那么找到该进程,kill掉即可. 或者最简单的…

Jmeter+ForEach控制器+BeanShell取样器+BeanShell PostProcessor爬取网站信息储存csv

1、正则提取器ForEach控制器BeanShell PostProcessorBeanShell 取样器&#xff0c;爬取网站信息并写入到csv中 2、访问网站设置 3、正则提取设置&#xff0c;匹配数字-1代表提取所有符合条件的信息 4、ForEach控制器设置迭代每次提取出来的信息 5、BeanShell PostProcessor设置…

【Python】python3编码方式encode介绍

上一篇文章介绍了计算机编码发展历史和编码方式&#xff0c;现在我们聚焦到python语言中&#xff0c;在最新的Python3版本中&#xff0c;字符串是以Unicode编码的&#xff0c;也就是说&#xff0c;Python的字符串支持多语言。例如&#xff1a; print(我喜欢 computer.encode(u…

telnet用法 测试端口号是否可以使用

方法 1 首先打开控制面板 2 点击程序 3 点击程序与功能 4 点击左边启用或关闭windows功能 5 在telnet客户端打上勾 点击确定 6 winr打开运行 输入cmd 7 打开后输入telnet ip 端口号 如果出来其他窗口则说明这个端口可用。若出现超时&#xff0c;说明这个端口不可用 前提…

Python操作读写txt文件

比较常用的文件读写选项&#xff1a; r读写模式 w写读模式 a追加写模式 a追加读模式&#xff0c;因为文件值在最后&#xff0c;所以需要先seek&#xff08;0&#xff09;到文件开头&#xff0c;然后再读 ‘r’以读的方式打开&#xff0c;只能读文件&#xff0c;若文件不存…