python cls_关于python中的self,ins , cls的解释
关于python中的self,ins,cls的解释参考下面两篇博文self比较好理解,self指的是类实例对象本身(注意:不是类本身)
class Person:
def _init_(self,name):
self.name=name
def sayhello(self):
print 'My name is:',self.name
p=Person('Tom')
print p
为什么不是指向类本身呢,如下例子:
class Person:
def _init_(self,name):
self.name=name
def sayhello(self):
print 'My name is:',self.name
p=Person('Tom')
p1 = Person('Jim')
print p
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用
class A(object):
def foo1(self):
print "Hello",self
@staticmethod
def foo2():
print "hello"
@classmethod
def foo3(cls):
print "hello",cl
二、上面例子已经看到cls, 对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
class A(object):
def foo1(self):
print "Hello",self
@staticmethod
def foo2():
print "hello"
@classmethod
def foo3(cls):print "hello",cls # cls就是类A本身
a = A()
a.foo1()
>>hello <__main__.A object at 0x03169110>
A.foo1(a) #这里传入实例a,相当于普通方法的self
>>hello <__main__.A object at 0x03169110>
A.foo2() #这里,由于静态方法没有参数,故可以不传东西
>>hello
A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。
>>hello
print A #可以看到,直接输入A,与上面那种调用返回同样的信息。
>>
class Desc:
def __get__(self, ins, cls):
print('self in Desc: %s ' % self )
print(self, ins, cls)
class Test:
x = Desc()
def prt(self):
print('self in Test: %s' % self)
t = Test()
t.prt()
t.x
运行结果如下:
self in Test: <__main__.Test object at 0x0000000002A570B8>
self in Desc: <__main__.Desc object at 0x000000000283E208>
<__main__.Desc object at 0x000000000283E208> <__main__.Test object at 0x0000000002A570B8>
大部分童鞋开始有疑问了,为什么在Desc类中定义的self不是应该是调用它的实例t吗?怎么变成了Desc类的实例了呢?
注意:这里调用的是t.x,也就是说是Test类的实例t的属性x,由于实例t中并没有定义属性x,所以找到了类属性x,而该属性是描述符属性,为Desc类的实例而已,所以此处并没有顶用Test的任何方法。
那么我们如果直接通过类来调用属性x也可以得到相同的结果。
下面是把t.x改为Test.x运行的结果。
self in Test: <__main__.Test object at 0x00000000022570B8>
self in Desc: <__main__.Desc object at 0x000000000223E208>
<__main__.Desc object at 0x000000000223E208> None
题外话:由于在很多时候描述符类中仍然需要知道调用该描述符的实例是谁,所以在描述符类中存在第二个参数ins,用来表示调用它的类实例,所以t.x时可
以看到第三行中的运行结果中第二项为
0x0000000002A570B8>。而采用Test.x进行调用时,由于没有实例,所以返回None。
python cls_关于python中的self,ins , cls的解释相关推荐
- 关于python中的self,ins , cls的解释
关于python中的self,ins , cls的解释 https://blog.51cto.com/10250691/1890078
- python 冷门知识点_Python中的10条冷门知识
下面时Python中一些不常见的冷门知识,感兴趣的小伙伴不妨来学习一下. 1.省略号也是对象 - 这是省略号,在Python中,一切皆对象.它也不例外.在 Python 中,它叫做 Ellipsis ...
- 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图
使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图 1. EoN是什么 2. 安装 3. 效果图 4. 源代码 4.1 源码 4.2 源码 参考 写这篇博客源于博友的提问 ...
- 使用Python,OpenCV在视频中进行实时条形码检测
使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...
- python缩进在程序中长度统一且强制使用_Python习题纠错1
February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...
- mac搭建python开发环境_Mac中基于Homebrew搭建python开发环境
转移到mac上了.这里是在lion中搭建python开发环境的简单记录.这份记录不是一份step by step.而是事后写的记录,可能有记忆遗漏.如果有错误,请指正. 1.安装homebrew的准备 ...
- python调用js库中的函数_Python 调用JS文件中的函数
Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...
- python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...
- python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)
python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...
最新文章
- oracle进城有哪些,oracle主要进程详解
- 钱大妈数据中台建设最佳实践
- 利用OpenCV进行人脸识别
- php当前月每天时间戳,php获取当前月与上个月月初及月末时间戳的方法
- Java入门知识,写一个最简单java程序
- 解决 phpmyadmin #2002 无法登录 MySQL 服务器
- 国际化android
- angular中注入依赖(分页功能)。。。
- springboot14 整合JDBC
- python大神作品_Python大神的书单
- (转)黑石帝国崛起的30年
- 100个C语言经典小程序和C语言编写的小游戏
- MEMORY系列之“DRAM概述”
- IT领域的罗马帝国——微软公司
- 计算机主板启动加密码,电脑主板BIOS加密解密设置
- 蒲公英服务器搭建小程序,uniapp 小程序打包发布
- 干货 :什么是数据科学?如何把数据变成产品?
- 用Excel做排列图
- 如何在 微软Microsoft 官网 下载 office365
- c++中sqrt函数的使用
热门文章
- drools6.5_Drools 6.2.0.Final发布
- java压缩文件读取_用Java读取/写入压缩和非压缩文件
- Kogito,ergo规则:从知识到服务,轻松自如
- java 参数命名冲突_Java中的命名参数
- war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区
- tomcat 正常关闭_Tomcat的带有守护程序和关闭钩子的正常关闭
- 如何用Java编写类似C的Sizeof函数
- java集合提取最小的日期_提取Java集合的元素-Java 8方法
- maven插件编写_编写Maven插件的提示
- Java 9对可选的补充