Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主。

类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不是真正了解这一块。

举个例子进行测试一下:

In [19]: class A():
....: pass
....: In [20]: a = A In [21]: type(a)
Out[21]: classobj In [22]: class B(object):
....: pass
....: In [23]: b = B In [24]: type(b)
Out[24]: type In [25]: c = A() In [26]: type(c)
Out[26]: instance In [27]: d = B() In [28]: type(d)
Out[28]: __main__.B

你能解释清楚a,b,c,d以及A,A(),B,B()真正代表什么吗?

如果可以的话,下面的东西就不用看了。

讲解的话用另一个例子吧,因为上述例子没有涉及到方法,不方便展开。

In [79]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class A:
: def __init__(self,name):
: self.name = name
: def say(self):
: return("I am %s" % (self.name))
:
:a1 = A
:a2 = A("alex")
:-- In [80]: dir(a1)
Out[80]: ['__doc__', '__init__', '__module__', 'say'] In [81]: dir(a2)
Out[81]: ['__doc__', '__init__', '__module__', 'name', 'say']

在这个例子中,a1和A是一个类,self代表一个对象,a2与A("alex")代表一个实例,say()代表方法。可以看到a1这个类本身是不含name属性的,但有方法属性(ps:这里必须补充一点,如果有类属性“xx”,那么a1的属性列表里是会有“xx”的);a2是一个实例,则有name属性;self是一个对象,因为不好测量,所以很多人模糊地认为对象就是实例,其实正确说来,对象一个模板,而实例就是这个模板的具体实现,详细地说,self包含name和say()的属性和方法,而a2包含name 为 alex以及say()方法;方法的话就不用细说了,这个大家一般不会混淆。

现在看第一个例子就会觉得豁然开朗了吧,除了一个type(A)为什么是type,这个涉及到metaclass,后续再说,不是本节重点。

Python的高级特性8:你真的了解类,对象,实例,方法吗的更多相关文章

  1. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  2. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  3. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  4. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  5. Python的高级特性(切片,迭代,生成器,迭代器)

    掌握了python的数据类型,语句和函数,基本上就可以编出很多有用的程序了. 但是在python中,并不是代码越多越好,代码不是越复杂越好,而是越简单越好. 基于这个思想,就引申出python的一些高 ...

  6. Learning Python 011 高级特性 2

    Python 高级特性 2 列表生成式 列表生成式就是指类似这样的代码:[x for x in range(1, 11)] >>> L = [x for x in range(1, ...

  7. Learning Python 011 高级特性 1

    Python 高级特性 1 切片 将L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']列表中前上个3个元素: L = ['Michael', 'Sarah ...

  8. python的高级特性3:神奇的__call__与返回函数

    __call__是一个很神奇的特性,只要某个类型中有__call__方法,,我们可以把这个类型的对象当作函数来使用. 也许说的比较抽象,举个例子就会明白. In [107]: f = abs In [ ...

  9. Python —— 函数高级特性(切片、迭代、列表生成式、生成器、迭代器)

    一.切片(Slice) 在很多编程语言中,针对字符串提供了很多截取函数(i.e.  substring),目的就是对字符串切片.python中没有针对字符串的截取函数,需要通过“切片”来完成. 取一个 ...

随机推荐

  1. 【读书笔记】iOS网络-使用Game Kit实现设备间通信

    Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...

  2. 【Android】OPlayer升级Vitamio到4.1

    前言 很久没有更新OPlayer,还是使用旧版Vitamio 3.0版本(新版已经到4.1),这次更新下. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.c ...

  3. 表单form的enctype="multipart/form-data"使用疑惑

    在使用表单传送数据的时候,如果form 加了enctype="multipart/form-data" 这个属性,那么表单请求传到另一个jsp或servlet 里时是不能用requ ...

  4. 让shell脚本在后台飞

    1. 使用&符号在后台执行命令 你可以在Linux命令或者脚本后面增加&符号,从而使命令或脚本在后台执行,例如:. $ ./my-shell-script.sh & 2. 使用 ...

  5. 【Android】apk文件反编译

    工具: 压缩软件:用于解压apk包 dex2jar:*.dex反编译为Jar包 jd-gui:查看Jar文件 (PS:不知道博客园如何上传附件,只能把工具挂到百度网盘了:http://pan.baid ...

  6. EF深入系列--细节

    1.在调试的时候,查看EF生成的SQL语句 在Context类的构造函数中添加以下代码,就可以在调试的时候在[输出]窗口中看到SQL语句 this.Database.Log = s => Sys ...

  7. python基础(四)运算

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们 ...

  8. mysql备份还原

    备份java代码如下: /** * 备份单个数据库 * @param dbName 数据库名称 * @return 备份成功或者失败 */ @Override public boolean backu ...

  9. 烂泥:ubuntu下配置msmtp+mutt发送邮件

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 本文主要介绍如何在Linux下使用msmtp+mutt发送邮件,当然Linux下发送邮 ...

  10. [转载]python脚本删除一定时间以外的文件

    import os; import sys; import time; class DeleteLog: def __init__(self,filename,days): self.filename ...