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 ...
随机推荐
- Android Studio如何删除一个Module
当你想在Android Studio中删除某个module时,大家习惯性的做法都是选中要删除的module,右键去找delete.但是在Android Studio中你选中module,右键会发现没 ...
- ros资料记录,详细阅读
ROS源码分析--子话题-catkin:https://blog.csdn.net/sukha/article/details/52460492 ROS源码分析:https://blog.csdn.n ...
- win10下子系统的倒腾记录
本文是对于win10下安装ubuntu 18.04的安装.配置c语言开发环境的记录: 一.win10下面的设置,从win10的1709开始,可以完整的搞定linux子系统,如果win10版本不够的同学 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- Centos 7设置静态IP,修改时区,关闭防火墙
Centos 7设置静态IP # vi /etc/sysconfig/network-scripts/ifcfg-enxxx BOOTPROTO="static" ...... I ...
- linux 关机/重启命令总结
linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...
- macbook配置homebrew
打开homebrew官网,https://brew.sh/将安装脚本复制到命令行中,执行即可 命令正在运行,下载应用,如果在安装应用时,下载速度很慢,可以参考https://blog.csdn.net ...
- android滑动标题栏渐变实现
import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.sup ...
- HTML5 地理位置定位API(4)
地理定位(geolocation)是最令人兴奋,而且得到了广泛支持的一个新API.通过这套API, JavaScript代码能够访问到用户的 当前位置信息.当然,访问之前必须得到用户的明确许可,即同意 ...
- osg::Camera example
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgV ...