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 ...
随机推荐
- 小程序 之eval替代方案(Binding.js)
一.下载 链接:https://pan.baidu.com/s/1D6vNSSBZI22_K1BzLEXpbg提取码:of6g 修改binding.js中的window.bind=binding为如下 ...
- vue实现element-ui对话框可拖拽功能
element-ui对话框可拖拽及边界处理 应业务需求,需要实现对话框可拖拽问题,应element-ui没有提供官方支持,于是便参考大神的文章,得出了适合业务需要的解决方案.很多大神给出的代码是没有解 ...
- Leetcode题目461:汉明距离(位运算-简单)
题目描述: 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意:0 ≤ x, y < 231. 示例: 输入: x = ...
- Python数据预处理(sklearn.preprocessing)—归一化(MinMaxScaler),标准化(StandardScaler),正则化(Normalizer, normalize)
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常 ...
- arcgis python 调用工具两种两种方法
arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1&qu ...
- MAC常用快捷键 基本常用的都整理在这里了
写在前面Mac系统中有几个比较特殊的功能键,和Win系统的区别也主要在这里比如在Win系统中我们常用的Ctrl键,在Mac系统中对应的不是长得比较像的Cnotrol,而是Command键,貌似也是Ma ...
- Linux中系统状态检测命令
1.ifconfig用于获取网卡配置与网络状态等信息,格式为:ifconfig [网络设备] [参数] 2.uname命令用于查看系统内核版本等信息,格式为:uname [-a] 查看系统的内核名称. ...
- oracle主键修改级联外键
举例:修改te_rygj_menu这张表的主键menu_id时,te_rygj_usermenu中的menu_id也跟着修改.利用触发器trigger实现: create or replace tri ...
- 用户登录之asp.net cookie的写入、读取与操作
页面前面: <div id="login" runat="server"> <span class="log_title" ...
- [转][C#]Oracle 连接错误的解决
错误1: .NET连接oracle,提示错误OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用 两个原因: 1. 权限,把 Oracle 所在目录权限设置成 authenticat ...