#!/usr/bin/env python # coding: utf-8 # # 面向对象简介 # # 对象一般是指一个类的实例,具有相关的成员变量和成员函数,在Python中成员变量叫做属性,成员函数叫做方法。 # # ## 什么是对象 # # Python中几乎所有的东西都是对象。基本类型是对象,如整数: # In[1]: a = 10 # 其属性与方法: # In[2]: a.real # In[3]: a.conjugate() # 对象在内存中有一个地址与之对应,这个地址可以用id()函数查看: # In[4]: id(len) # 同一个对象的内存地址一致: # In[5]: b = a # In[6]: id(b) == id(a) # id()函数本身也是对象: # In[7]: id(id) # 在Python中,只有一些保留的关键字和符号不是对象。 # ## 自定义类型 # # 基本形式为: # ```python # class ClassName(ParentClass): # """class docstring""" # def some_method(self, ...): # return ... # ``` # 具体规律为: # - class关键字在最开始。 # - ClassName是自定义类型的名称, Python对类型名称没有规定,流行的做法是用大骆驼拼写法(Upper Camel Case)的记法,即每个单词的首字母大写,中间不留空格。 # - “()”中的ParentClass用来表示继承关系,可省略,默认为object。 # - “:”不能缺少,之后的内容要进行缩进。 # - 三引号包含的部分是类型的文档即docstring,可以省略。 # - 类型的方法定义与函数定义类似,第一个参数表示是对象本身,通常用self表示。 # # 例如: # In[8]: class Leaf(object): """A leaf falling in the woods.""" pass # 其中,pass是一个特殊的关键词,用来占位,表示什么都不做。 # 新类型Leaf继承了Python中最基本的类型,即object。事实上所有的对象都是object: # In[9]: isinstance(10, object) # In[10]: isinstance([], object) # 三引号的部分是对Leaf类的说明文档,可以调用Leaf的`.__doc__`属性查看: # In[11]: Leaf.__doc__ # Leaf对象的产生: # In[12]: leaf = Leaf() # 在Python里,变量是区分大小写的,因此,leaf和Leaf是不同的变量。 # # 再次调用生成的对象是不同的: # In[13]: leaf2 = Leaf() # In[14]: leaf is leaf2 # In[ ]: