本文旨在Python复习和总结:

1、如何创建类和实例?

# 创建类

class ClassName(object):

"""docstring for ClassName"""

def __init__(self, arg):

super(ClassName, self).__init__()

self.arg = arg

# 创建实例

instance = ClassName()

2、经典类与新式类的区别?

3、什么是方法?如何定义?如何使用?

方法是类的功能

定义在类中

通过实例调用

4、self代表什么?用在哪些地方?

每个类方法都有一个self参数,代表实例对象本身,当实例调用方法时,由解释器悄悄地传递给方法,不用手动self进来。

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

在wangkangluo1的Python为什么要self中讲的很清楚:

创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数。

5、类对象的两种操作?

定义完类之后就产生了类对象,类对象支持的两种操作:引用和实例

。引用:通过类对象去调用类中的属性或方法;实例:通过类对象实例化一个类对象的实体。

6、什么是Python类属性和实例属性?

属性就是另一个对象的数据或函数元素!通过句点符号访问,如一些python类型如复数有数据属性,列表和字典拥有方法(函数属性)。还有可能是,访问一个属性时,这个属性又是对象,其又拥有自己的属性,这样就构成了属性链。如:

>>> import sys

>>> sys.stdout.write('beginman')

beginman

>>> myMoudel.myClass.__doc__

类属性与类相关,与实例无关,通常是类的数据属性,仅仅是类中定义的变量,通常称作静态变量或静态数据。在其他语言中相当于在变量前加上static。

>>> class C(object):

foo = 100 # 定义类属性

>>> print C.foo # 访问类属性

100

>>> C.foo = C.foo+100 # 更新类属性

>>> C.foo

200

由上所知,类属性仅仅与类(类也是对象,python中称类对象)相关,与实例半毛钱关系都没有。

>>> class C(object):

foo = 100 # 定义类属性

>>> print C.foo # 访问类属性

100

>>> C.foo = C.foo+100 # 更新类属性

>>> C.foo

200

>>> c=C() # 实例化一个对象c

>>> c.foo

200

>>> c.foo = 1000 # 实例试图修改类属性

>>> c.foo # 实例想看是否修改成功,于是就c.foo竟输出1000,于是实例就满以为自己成功了

1000

>>> C.foo # 类对象鄙夷的看了实例一样,说:“你就是老子生出来的,老子的东西你也能碰??”

200

>>> del c.foo # 实例看完之后当场傻眼,心想mlgb,你牛B,我还是除掉自己负担沉重的改造吧

>>> c.foo # 实例除掉了自己负担沉重的改造后,老老实实地调用类对象给的sb玩意

200

>>> # 通过类对象与实例关于类属性争权大战后,我们知道了一点:

>>> #类属性仅仅与类(类也是对象,python中称类对象)相关,与实例半毛钱关系都没有。

>>> #如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。

>>>

7、类方法?

>>> class C(object):

foo = 100

def met(self):

print 'i am method for class.'

>>> C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩

Traceback (most recent call last):

File "", line 1, in

C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩

TypeError: unbound method met() must be called with C instance as first argument (got nothing instead)

>>> # 出大事了,方法竟然不同意还反抗了

>>> # 心想这是为什么呢?突然想到了原来是那鸟人Python

>>> # 鸟人 Guido van Rossum 创造Python类给出的规定就是,你可以创类方法,但是不能调戏她。

>>> c=C() # 类心有不甘,于是创了实例小c来助纣为虐

>>> c.met() # 实例小c心想,mlgbd,上次想修改类属性就被你狠狠地鄙视了一番,现在又为难我,唉,命苦。无论如何试试吧

i am method for class.

>>> # 龌龊,类方法竟然听我实例的,于是实例就赶紧找Guido van Rossum问什么情况

>>> # Guido van Rossum就说”为了与OOP惯例保持一致,没有实例就不能调用方法,这种限制就是Python所描述的绑定概念,方法必须绑定在实例中才听话,不能把权利都交给了类,这是老子对你实例的恩惠啊。“

>>> # 实例听完泪牛满面,类对象发怒了,说:”今天,我就要把我身上的所有零件(属性)都掏出来看看,看都有谁不听话!“

>>> dir(C) # 于是类对象使用第一招 dir()内建

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'met']

>>> print C.__dict__ # 第二招就是召遣他最听话的属性 __dict__ 来揪出

{'__module__': '__main__', 'met': , '__dict__': , 'foo': 100, '__weakref__': , '__doc__': None}

>>>

类对象出尽风头之后,该轮到实例了:

实例的创建:

C++等编程应用,实例对象是New出来的,Python牛b,就跟人家不一样,偏以函数调用的形式实例化。

class CC(object):

#我是Python类默许的,没重写__init__,所以也没有什么特殊操作

pass

class C(object):

def __init__(self,name,phone,ID):

super(C,self).__init__()

self.name = name

self.phone = phone

self.id = ID

print 'Hi man 我重写了__init__,因为我需要更多的操作'

cc = CC() # 创建CC实例

c = C('BeginMan','110','12306') # 创建C实例

重点::

当类被调用,实例化的第一步就是创建实例对象,然后Python检查是否实现了__init__()方法,默认情况下如果没有覆盖__init__就不会施加特别的操作。任何特别的操作都需要重写__init__。

接着就是传递参数,这依赖于你自己定义的__init__,它里面有多少个参数,在实例化的过程中就要传多少个参数,不管是否覆盖了__init__(),实例对象都要作为第一个参数传递进去。

__init__与__new__,__call__的区别:

__new__更像真正的构造器,创建对象时调用,返回当前对象的一个实例。但是实际中用的很少。

__init__:初始化工作,创建对象时调用,对当前对象的实例进行初始化,无返回值。在Python中很常用的。

__call__:让类的实例的行为表现的像函数一样,你可以调用他们,将一个函数当做一个参数传到另外一个函数中等等。很少用。

优先级:__new__先与__init__

__del__析构器方法,见《py 核心》

实例属性:

可在创建实例后的任意时间创建,也可以在"运行时"创建.__init__()是创建这些属性的关键点。

>>> c.__dict__ # 此时实例c还没属性

{}

>>> c.__class__ # 实例化的类

>>> c.foo=1

>>> c.name='CS'

>>> c.__dict__

{'foo': 1, 'name': 'CS'}

>>> dir(c)

[***'foo', 'name'***,'__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

python面向对象与其他语言的异同点?

什么是构造器,__init__表示什么? 有什么意义?

OOP常用术语

这在软件工程经常见到的,由于Python OOP实际运用的并不是太多,所以对于OOP特征的体现就不那么明显,C++/Java/C# OOP思想体现倒是挺深的,不过本人太菜,难以熟谙OOP的精髓。

面向对象程序设计中的常用术语总结

其中对还包括自省。

什么是Python自省(反射)?

python oop_python中oop相关推荐

  1. python 类中定义类_Python中的动态类定义

    python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...

  2. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  3. python调用什么函数实现对文件内容的读取_如何使用python语言中的方法对文件进行读写操作...

    在我们使用python语言中的文件时,可以使用open()方法打开文件,close()方法关闭文件,read()方法读取文件内容,write()方法写入内容到文件中.下面利用几个实例说明文件读写方法, ...

  4. python图像中如何显示中文

    python图像中如何显示中文 在开头加入这两行即可 from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei']

  5. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  6. Python培训分享:Python新版本中的6个新特性

    Python在几年做了一个全面的升级,此次Python升级中有6个新特性,本期小编为大家介绍的Python培训教程就是关于介绍Python新版本中的6个新特性的,来看看下面的详细介绍. Python培 ...

  7. Python培训常识:Python面试中常被问到的几种设计模式要知道

    学习Python技术大家都是为了日后能够找到适合自己的工作岗位,那么除了要学习好Python技术外,对于面试环节的问题也要有所了解,本期小编为大家介绍的Python培训教程就算关于Python面试中常 ...

  8. python语言中如何使用注释

    每一种计算机语言都有自己的注释方式,我们知道注释的作用是解释这些代码,方便程序员以后的检查和修改.而且注释的一部分在运行程序的过程中不起作用,也不会显示出来.下面我们将为大家介绍,在python语言中 ...

  9. arcgis里python窗口运行,在 Python 窗口中执行工具

    当第一次打开 Python 窗口时,它会显示类似这样的界面: 左侧区域为 Python 的主提示窗口,在这里执行 Python 命令.右侧区域为帮助和语法窗口,工具运行时,在这里显示执行消息:输入代码 ...

最新文章

  1. 在思科模拟器下搭建WWW、DNS、FTP、Email服务
  2. 谷歌CEO:没有这项能力,再牛的程序员也不要!
  3. 用java程序编写ip仿真器_用java 编写一个可以实现IP地址查询功能的课程设计
  4. python arp脚本_Python scapy 实现一个简易 arp 攻击脚本
  5. 笔记-信息系统安全管理-《信息安全等级保护管理办法》
  6. 技术宝典 | 基于标准 WebRTC 低延迟直播的开源实践
  7. 剑指offer66题 -- 输入一个链表,从尾到头打印链表每个节点的值
  8. python udp客户端 服务器实现方式_python3实现UDP协议的简单服务器和客户端
  9. VS中lib和dll
  10. Java高级开发必会的50个性能优化的细节(珍藏版)
  11. 《RPA、AI、.NET Core 与未来》-中国.NET开发者峰会
  12. 算法:删除顺序表中重复的元素
  13. React Native 实现物流进度信息
  14. [CQOI2014]数三角形 题解(找规律乱搞)
  15. 5_数据分析—数据可视化
  16. 我在看着你呢——shiro学习
  17. 阿里云弹性云桌面、传统PC和虚拟桌面VDI区别对比
  18. Java类和对象(未完待续,持续更新)
  19. 这几个宝藏网站,一旦知道,你就离不开了!!!
  20. 照片损坏怎么办,怎么恢复受损照片

热门文章

  1. epoll nio区别_高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?...
  2. python 字典长度_python字典可以容纳多少个元素?
  3. java String对象转Base64
  4. VS code 快捷键
  5. html 图片切换渐变效果图,CSS3 用CLIP来做图片切换的渐变效果
  6. java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码
  7. 以太网的分层架构_【新能源汽车专题】智能车时代的核心,电子架构系统深度解读,国内8股进入全球产业链(名单)...
  8. 7的整除特征 三位一截_「每周一课」数字和除号握手言和,来攻克整除问题
  9. python django下载_简单了解django文件下载方式
  10. ext2fsd打开提示硬盘格式化_苹果Macbook电脑安装win10系统教程及错误提示信息解决方法...