类与实例

类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象
的具体信息。

class MyData(object):
  pass

>>> mathObj = MyData()
>>> mathObj.x = 4
>>> mathObj.y = 5
>>> mathObj.x + mathObj.y
9
>>> mathObj.x * mathObj.y
20

可以使用类作为名字空间容器
mathObj.x 和 mathObj.y 是实例对象独有的属性,因为它们不是类 MyData 的属性。

方法
class MyDataWithMethod(object): # 定义类
  def printFoo(self): # 定义方法
    print 'You invoked printFoo()!'

>>> myObj = MyDataWithMethod() # 创建实例
>>> myObj.printFoo() # 现在调用方法
You invoked printFoo()!

pytyhon中,特殊的方法__init__() ,不是构造器。只是实例化过程中执行的方法。

class AddrBookEntry(object): # 类定义
  'address book entry class'
  def __init__(self, nm, ph): # 定义构造器
    self.name = nm # 设置 name
    self.phone = ph # 设置 phone
    print 'Created instance for:', self.name
  def updatePhone(self, newph): # 定义方法
    self.phone = newph
    print 'Updated phone# for:', self.name

在 调用AddrBookEntry()实例化/创建实例时,AddrBookEntry()的参数完全与__init__()接收到的参数是一样(除了__init__中的self被自动传递) ,都是nm,ph

创建实例(实例化)

self被自动传递,使用时,可以忽略
>>> john = AddrBookEntry('John Doe', '408-555-1212') #为 John Doe 创建实例
>>> jane = AddrBookEntry('Jane Doe', '650-555-1212') #为 Jane Doe 创建实例


>>> john
<__main__.AddrBookEntry instance at 80ee610>
>>> john.name
'John Doe'
>>> john.phone
'408-555-1212'
>>> jane.name
'Jane Doe'
>>> jane.phone
'650-555-1212


方法调用(通过实例)

self被自动传递,使用时,可以忽略
>>> john.updatePhone('415-555-1212') #更新 John Doe 的电话
>>> john.phone
'415-555-1212'


创建子类
指对新类的改动不会影响到原来的类

class EmplAddrBookEntry(AddrBookEntry):
'Employee Address Book Entry class'#员工地址本类
def __init__(self, nm, ph, id, em):
AddrBookEntry.__init__(self, nm, ph)
self.empid = id
self.email = em
def updateEmail(self, newem):
self.email = newem
print 'Updated e-mail address for:', self.nam


python推荐的命名方式  

类名,使用大写开头的驼峰法,例如:

AddrBookEntry,RepairShop


数据属性,使用名词 ,小写,例如:

name,phone,email 

方法名,使用动词,骆驼记法的下划线方式 ,例如:

update_phone,update_email

面向对象设计与面向对象编程的关系

尽管它从一开始设计就是面向对象的,并且结构上支持 OOP,但Python 没有限定或要求你在你的应用中写 OO 的代码。


类的数据属性:

注意以下并不需要创建对象,即可调用。

>>> class C(object):
... foo = 100
>>> print C.foo
100
>>> C.foo = C.foo + 1


>>> print C.foo
101


 方法:

这里,myNoActionMethod 是通过句点属性标识法与它的实例绑定的。
>>> class MyClass(object):
def myNoActionMethod(self):
pass
>>> mc = MyClass()
>>> mc.myNoActionMethod()

>>> dir(MyClass)
['__doc__', '__module__', 'showMyVersion', 'myVersion']

>>> MyClass.__dict__
{'__doc__': None, 'myVersion': 1, 'showMyVersion':
<function showMyVersion at 950ed0>, '__module__':
'__main__'}
从上面可以看到, dir()返回的仅是对象的属性的一个名字列表, 而__dict__返回的是一个字典,
它的键(keys)是属性名,键值(values)是相应的属性对象的数据值。

C.__name__ 类C的名字(字符串)
C.__doc__ 类C的文档字符串
C.__bases__ 类C的所有父类构成的元组
C.__dict__ 类C的属性
C.__module__ 类C定义所在的模块(1.5 版本新增)
C.__class__ 实例C对应的类(仅新式类中)

实例属性
实例仅拥有数据属性(方法严格来说是类属性),后者只是与某个类的实例相关联的数据值,并
且可以通过句点属性标识法来访问。这些值独立于其它实例或类。当一个实例被释放后,它的属性
同时也被清除了。

面向对象——python核心编程第二版的更多相关文章

  1. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  2. Python核心编程(第二版)PDF

    Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...

  3. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  4. Python核心编程第二版(中文).pdf 目录整理

    python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源  :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...

  5. python 核心编程第二版 课后习题 第11章

    11-3 函数.在这个练习中,我们将实现 max()和 min()内建函数. (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数.他们应该可以用任意的 pytho ...

  6. 《python核心编程第二版》第8章习题

    8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...

  7. 《python核心编程第二版》第7章习题

    7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答:dict1.update(dict2) 7–2. 字典的键.我们知道字典的值可以是任意的Python 对象,那字典的键又如何呢?请试 ...

  8. 《python核心编程第二版》第5章习题

    5-1 整形 讲讲 Python 普通整型和长整型的区别 答:普通整型 32位,长整数类型能表达的 数值仅仅与你的机器支持的(虚拟)内存大小有关 5-2 运算符(a) 写一个函数,计算并返回两个数的乘 ...

  9. 《python核心编程第二版》第4章习题

    4–1. Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的

随机推荐

  1. 理解的shell父子关系

    今天我们谈谈linux系统的shell的父子关系,因为大家对手机都比较熟悉,手机本身也是一个linux主机,所以我们今天就拿手机来举个例子. 首先就是创建一个新的shell,你可以把它理解成一个手机打 ...

  2. ELK7.11.2版本安装部署及ElastAlert告警相关配置

    文档开篇,我还是要说一遍,虽然我在文档内容中也会说好多遍,但是希望大家不要嫌我墨迹: 请多看官方文档,请多看命令行报错信息,请多看日志信息,很多时候它们比百度.比必应.比谷歌有用: 请不要嫌麻烦,打开 ...

  3. Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(四):客户端强类型约束,自动生成 API TS 类型定义

    系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇 Go + gRPC-Gateway(V2) ...

  4. C/C++中的const

    1 C中的const C中const修饰的变量是只读变量,在使用const关键字声明定义变量时会给该变量分配内存空间. const修饰的全局变量默认是外部链接的,即其它源文件可以直接使用该变量. co ...

  5. Java基础 - List的两个子类的特点

    List两个子类的特点 List的两个子类的特点 因为两个类都实现了List接口,所以里面的方法都差不多,那这两个类都有什么特点呢? ArrayList: 底层数据结构是数组,查询快,增删慢. Lin ...

  6. Linux 基础命令 命令进阶

    Linux命令格式:命令 选项 参数 (大部分命令是这个格式) 注意: 1.命令区分大小写 2.短选项可以合并   长选项不能合并 如 : 短选项 -l  -h 可以合并为 -lh 长选项  不能合并 ...

  7. 1. chmod命令

    (一)  简介 chmod命令可以修改文件和目录的权限.控制文件或目录的,读,写,执行权限. 可以采用数字或字符的方式对文件或目录的权限进行变更. 通过命令 ls -l 查看到的9位权限位,rw-   ...

  8. python对BP神经网络实现

    python对BP神经网络实现 一.概念理解 开始之前首先了解一下BP神经网络,BP的英文是back propagationd的意思,它是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称 ...

  9. mysql架构与存储引擎 (Myisam与Innodb)

    mysql抽象架构:可以分为SQL Layer和Storage Engine Layer mysql的engine层是基于表的,不是基于库的,创建表的语句可以指定engine Mysql的架构 Mys ...

  10. 1-3 Postman 注册账号与登录

    1.为什么要注册postman账号 注册postman账号是免费的.当注册并登陆一个postman账号后,用户可以获得如下权限. (1)同步和备份历史,集合,环境,和预置头. (2)可以轻松的处理来自 ...