Python——方法
方法是类或者对象行为特征的抽象,方法其实也是函数,它的定义方式、调用方式与函数都很相似。
一、类调用实例方法
先来看一段代码:
# 定义全局空间test函数
def test():
print ('全局空间test方法')
# 定义全局空间num变量
num = 1 # 定义Test01类
class Test01:
# 定义Test01空间内的test02函数
def test02():
print ('Test01空间的test02方法')
# 定义Test01空间内的num变量
num = 2 #调用全局函数test()
test() # 打印 全局空间test方法 # 调用 Test01空间的函数test02()
Test01.test02() # Test01空间的test02方法 #调用全局变量num
print (num) # 打印 1 # 调用Test01空间的变量num
print (Test01.num) # 打印 2
上面代码中,可以看出全局空间内定义的函数和在Test01类中定义的函数没有多大区别,在调用Test01类中的函数和变量,只需要类名.变量名或者类名.函数名就可以了,这就是类调用实例。
值得注意的是,使用类名.函数名访问的是函数,使用实例.函数名访问的是方法。
例:
A = Test01()
from types import FunctionType,MethodType
# 通过实例访问的是方法
print (isinstance(A.test02,MethodType)) # 打印 True
# 通过类访问的是函数
print (isinstance(Test01.test02,FunctionType)) # 打印 True
如果使用类调用实例方法,第一个参数不会自动绑定,只能手动去为第一个参数绑定参数值。
例:
class Tree:
def apple_tree(self):
print ('这是一棵树',self) # 直接使用类名.函数名调用,由于第一个参数不会自动绑定,会报错 TypeError: apple_tree() missing 1 required positional argument: 'self'
Tree.apple_tree() T = Tree()
# 为第一个参数绑定参数值
Tree.apple_tree(T) # 打印 这是一棵树 <__main__.Tree object at 0x0000000002E335F8> # 第一个参数绑定的参数值不一定要绑定该Tree类的对象T,例如绑定字符串
Tree.apple_tree('雪梨树') # 打印 这是一棵树 雪梨树
二、类方法和静态方法
使用@classmethod装饰的方法是类方法,python会自动绑定类方法的第一个参数到类本身(参数名通常是cls),可以通过他来传递类的属性和方法,但不能传递实例的属性和方法;使用@staticmethod装饰的方法是静态方法,静态方法不会自动绑定第一个参数到类本身,且静态方法没有‘self’和‘cls’参数,方法中不能使用类或实体的任何属性和方法。
类方法,例:
class a:
a1 = 0
def c():
print ('a类的c方法')
@classmethod
def b(cls):
cls.c()
print (cls.a1)
# 通过类调用,自动绑定类方法的第一个参数,不需要手动去绑定
a.b()
'''
打印
a类的c方法
0
''' # 通过实例对象调用
A = a()
A.b()
'''
打印
a类的c方法
0
'''
静态方法,例:
class a:
@staticmethod
def b():
print ('b()是静态方法') # 通过类调用
a.b() # 打印 b()是静态方法 # 通过实例对象调用
A = a()
A.b() # 打印 b()是静态方法
Python——方法的更多相关文章
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- django中将views.py中的python方法传递给html模板文件
常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): cap ...
- python方法是什么?
python方法是什么? 方法用来描述对象所具有的行为. 在类中定义的方法可以粗略分为四大类:公有方法.私有方法.静态方法.类方法. 公有方法.私有方法一般所指属于对象的实例方法, 私有方法的名字以两 ...
- [转载]Python方法绑定——Unbound/Bound method object的一些梳理
本篇主要总结Python中绑定方法对象(Bound method object)和未绑定方法对象(Unboud method object)的区别和联系.主要目的是分清楚这两个极容易混淆的概念,顺便将 ...
- Python方法oslo_service.loopingcall.LoopingCallDone代码示例
Python方法oslo_service.loopingcall.LoopingCallDone代码示例 demo: from oslo_service import loopingcall def ...
- odoo14 button 事件调用python方法如何传递参数
1 <field name="user_ids" 2 mode="kanban" 3 nolabel="1" 4 options=&q ...
- python方法中的self
前几天在写一个c作业时,突发奇想,在结构体中加入函数指针, 像这样: struct People { int _age; int (*age)(); }people; 这样调用时就可以 people. ...
- python 方法
1.首先运行python交互模式 输入 python 2.定义一个有序的集合 相当于js中的数组它里面有一些增删改查的方法 1. 定义一个数组 >>> ww = ['1','2',' ...
- python 方法调用
获取当前时间 today=time.strftime('%Y-%m-%d',time.localtime(time.time())) 取得时间相关的信息的话,要用到python time模块,pyth ...
- c#(IronPython)调用Python方法
直接一段代码演示 public void StartTCP() { ScriptEngine engine = Python.CreateEngine(); var paths = engine.Ge ...
随机推荐
- vue 弹窗式 滑动图片验证码
效果图: 具体代码: test.vue //整个页面是个弹窗 visible 控制弹窗的显示关闭 默认打开 <template> <div class="mask_laye ...
- SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK
SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...
- Error: unable to load xmlsec-openssl library
yum install libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel
- docker - nginx+php+php-mysql(扩展)
Docker 安装 Nginx(https://www.runoob.com/docker/docker-install-nginx.html) Docker 安装 PHP(https://www.r ...
- pgpool 的配置文件详解
listen_addresses = 'localhost' # Host name or IP address to listen on: # '*' for all, '' for no TCP/ ...
- Java并发包线程池之ForkJoinPool即ForkJoin框架(二)
前言 前面介绍了ForkJoinPool相关的两个类ForkJoinTask.ForkJoinWorkerThread,现在开始了解ForkJoinPool.ForkJoinPool也是实现了Exec ...
- ELK 二进制安装并收集nginx日志
对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...
- python下multiprocessing和gevent的组合使用
python下multiprocessing和gevent的组合使用 对于有些人来说Gevent和multiprocessing组合在一起使用算是个又高大上又奇葩的工作模式. Python的多线程受制 ...
- Qwidget::update
void QWidget::update ()分析重绘事件激活 1看看手册中这段话 void QWidget::update () [slot] Updates the widget unless u ...
- 三个线程abc顺序执行
1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...