<python>模块、类、对象

Python 是一种“面向对象编程语言(Object Oriented Programming Language)”。这个说法的意思是说, Python 里边有一种叫做 class 的结构,通过它你可以用一种特殊的方式构造你的软件。通过使用 class(类),你可以让你的程序架构更为整齐,使用起来也会更为干净——至少理论上应该是这样的。 现在我要教你的是面向对象编程的起步知识,我会用你学过的知识向你介绍面向对象编程、类、以及对 象。问题是变相对象编程(简称OOP)本身就是个奇怪的东西,你只有努力去弄懂这一章的内容,好好 写代码,然后到下一章节的习题,我就能把OOP像钉钉子一样钉到你脑子里了。 现在就开始吧。

模块和字典差不多

你知道怎样创建和使用字典这个数据类型,这是一种将一种东西对应到另外一种的方式。这意味着如果 你有一个字典,它里边有一个叫 ‘apple’ 的 key,而你要从中取值的话,你需要这样做:

mystuff = {‘apple‘: "I AM APPLES!"}

print mystuff[‘apple‘]

记住这个“从Y获取X”的概念,现在再来看看模块(module),你已经创建和使用过一些模块了,你已 经了解了它们的一些属性: 1. 模组是包含函数和变量的 Python 文件。 2. 你可以 import 这个文件。 3. 然后你可以使用 ‘.’ 操作符访问到模组中的函数和变量。 假如说我有一个模块名字叫 mystuff.py 并且在里边放了个叫做 apple 的函数,就像这样:

# this goes in mystuff.py

def apple():

print "I AM APPLES!"

接下来我就可以用 import 来调用这个模块,并且访问到 apple 函数:

import mystuff

mystuff.apple()

我还可以放一个叫做 tangerine 的变量到模块里边:

def apple():

print "I AM APPLES!"

# this is just a variable

tangerine = "Living reflection of a dream"

一样的我还是可以访问到这个变量:

import mystuff

mystuff.apple()

print mystuff.tangerine

回到字典的概念,你会发现这和字典的使用方式有点相似,只不过语法不同而已,我们来比一比: mystuff[‘apple‘]

# get apple from dict

mystuff.apple()

# get apple from the module

mystuff.tangerine

# same thing, it‘s just a variable

也就是说,Python 里边有这么一个通用的模式: 1. 拿一个类似 key=value 风格的数据容器 2. 通过 key 的名称获取其中的 value 对于字典来说,key 是一个字符串,获得值的语法是 [key] 。对于模块来说,key是函数或者变量的名称,而语法是 .key 。除了这个,它们基本上就没什么区别了。

类和模块差不多 

模块还可以用一种方法去理解:你可以把它们当做一种特殊的字典,通过它们你可以储存一些 Python 代码,而你可以通过 ‘ .’ 操作符访问到这些代码。Python 还有另外一种代码结构用来实现类似的目的, 那就是 类 (class) ,通过类,你可以把一组函数和数据放到一个容器中,从而用 ‘ .’ 操作符访问到它们。 如果我要用创建 mystuff 模块的方法来创建一个类,那么方法大致是这样的:

class MyStuff(object):

def __init__(self):

self.tangerine = "And now a thousand years between"

def apple(self):

print "I AM CLASSY APPLES!"

这个和模块比起来有些复杂,确实,比起模块来,这里的确做了很多事情,不过你应该能大致看出来, 这段代码差不多就是模拟了一个名字叫 MyStuff 的迷你模块,里边有一个叫做 apple() 的函数,难懂的 恐怕是 __init__() 函数,还有就是设置 tangerine 变量时用了 self.tangerine 这样的语法。

使用类而非模块的原因如下:你可以拿着上面这个类,重复创建出很多出来,哪怕是一次一百万个,它 们也不会互相干涉到。而对于模块来说,当你一次 import 之后,整个程序里就只有这么一份内容,只有 鼓捣得很深才能弄点花样出来。 不过在弄懂这个之前,你要先理解“对象(object)”是什么东西,以及如何使用 MyStuff 达到类似 import mystuff 实现的结果。

对象相当于迷你版的 import 

如果说类和迷你模块差不多,那么对于类来说,也必然有一个类似 import 的概念。这个概念名称就是 “实例(instance)”。这只是一种故作高深的叫法而已,它的意思其实是“创建”。

当你将一个类“实例化”以后,你就得到了一个对象 (object) 。实现实例化的方法,就是像调用函数一样地调用一个类:

thing = MyStuff()

thing.apple()

print thing.tangerine

第一行代码就是“实例化”操作,这和调用函数很相似。然而,当你进行实例化操作时,Python 在背后 做了一系列的工作,这里我针对上面的代码详细解释一下: 1. Python 看到了 MyStuff() 并且知道了它是你定义过的一个类。 2. Python 创建了一个空的对象,里边包含了你在类中用 def 创建的所有函数。 3. 然后 Python 回去检查你是不是在里边创建了一个 __init__ 魔法函数,如果你有创建,它就会 调用这个函数,从而对你的空对象实现了初始化。 4. 在 MyStuff 中的 __init__ 函数里,我们有一个多余的函数叫做 self ,这就是 Python 为我们创 建的空对象,而我可以对它进行类似模块、字典等的操作,为它设置一些变量进去。 5. 在这里,我把 self.tangerine 设成了一段歌词,这样我就初始化了该对象。

6. 最后 Python 将这个新建的对象赋给一个叫 thing 的变量,以供后面使用。 这就是当你像调用函数一样调用类的时候, Python 完成这个“迷你 import”的过程。记住这不是拿来 一个类就直接用,而是将类当做一个“蓝图”,然后用它创建和这个类有相同属性的拷贝。 提醒你一点,我的解释和 Python 的实际原理还是有一点小小的出入,只不过在这里,基于你现有的关 于模块的知识,我也暂时只能这么解释了。事实上类和对象和模组是完全不同的东西。如果我实实在在 地跟你讲的话,我大概会说出下面的这些东西: • 类就像一种蓝图、或者一种预定义的东西,通过它可以创建新的迷你模块。 • 实例化的过程相当于你创建了这么一个迷你模块,而且同时 import 了它。 • 结果生成的迷你模块就是一个对象,你可以将它赋予一个变量并进行后续操作。 而通过这一系列的操作,类和对象和模块已经很不同了,所以这里的内容只是为了让你理解类的概念而 已。

从东西里获取东西

现在我有三种方法可以从某个东西里获取它的内容:

# dict style

mystuff[‘apples‘]

# module style

mystuff.apples()

print mystuff.tangerine

# class style

thing =MyStuff()

thing.apples()

print thing.tangerine

时间: 2024-11-09 02:44:27

<python>模块、类、对象的相关文章

python模块-类

#!/usr/bin/env python # encoding: utf-8 """ @version: python3.6 @file: object_oriented.py @time: 2017/11/3 21:18 """ '''定义类并执行类中的方法: class 类名: def 方法名(self,arg): print(arg) 中间对象 = 类名()#类的实例化 中间人.方法名(1)#此处的 1 指的是上面的arg''' # ''

python 将类对象转换成json

如果将字典转换成json,想必都很熟悉了,如果在进阶点,将class类转换成json对象该如何操作了? 1,先定义一个类 #定义一个Student类 class Student(object): def __init__(self,name,age,score): self.name = name self.age = age self.score = score 2,在实例化Student类,传入3个参数 #实例化这个对象 s = Student('hello',20,80) 3,利用json

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

python—类对象和实例对象的区别

最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行调用.这段通讯层的代码实质上做了五件事: 第一:加载dll: 第二:初始化dll内的通讯参数: 第三:与服务器进行连接,创建session 第四:把数据senbuffer通过sessionManger发送给服务器 第五:取得的数据返回recibuffer def testlogin(ip,port,

Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 注意点: self ,我们讲过了,self = 对象,实例化后的对象调用类的各种成员的时候的self就是这个对象. 而且我们也讲过了

python基础(类、对象、包)完整的总结

python基础(类和对象.包)类和对象对象是看的见摸的着的类是模板对象需要类才能创建出来类的构成(三个部分)类的名称:类名类的属性:一组数据类的方法:允许进行操作的方法(行为)class 类名():def添加方法class Cat():def run(self):print("cat is running")xiaobai = Cat()xiaobai.run()xiaobai.name = "小白"xiaobai.age = 40类的属性属性就是变量一个类可以创

(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

一:类对象 前面讲的类定义格式中,“class 类名:”.实际上,当解释器执行class 语句时, 就会创建一个类对象. [操作] #测试类对象的生成 class Student: pass #空语句 print(type(Student)) print(id(Student)) print(Student) s1 = Student() print(s1) Stu2 = Student s2 = Stu2() print(Stu2) print(s2) 运行结果: <class 'type'>

Python 【类与对象】

类与对象 把类的个例就叫做实例 (instance),可理解为“实际的例子”类是某个特定的群体,实例是群体中某个具体的个体 Python中的对象等于类和实例的集合:即类可以看作是对象,实例也可以看作是对象,比如列表list是个类对象,[1,2]是个实例对象,它们都是对象“万事万物,皆为对象” 类的创建和调用 类的创建类名的首字母要大写 1 class Chinese: # 创建一个类 2 eye = 'black' 3 4 def eat(self): #参数self的特殊之处:在定义时不能丢,

使用C语言为python编写动态模块(1)--从底层深度解析python中的对象以及变量

楔子 我们知道可以通过使用C语言编写动态链接库的方式来给python加速,但是方式是通过ctypes来加载,通过类CDLL将动态链接库加载进来得到一个对象之后,通过这个对象来调用动态链接库里面的函数.那么问题来了,我们可不可以使用C语言为python编写模块呢?然后在使用的时候不使用ctypes加载动态库的方式,而是通过python的关键字import进行加载. 答案是可以的,我们知道可以通过编写py文件的方式来得到一个模块,那么也可以使用C语言来编写C源文件,然后再通过python解释器进行编

使用C语言为python编写动态模块(2)--解析python中的对象如何在C语言中传递并返回

楔子 编写扩展模块,需要有python源码层面的知识,我们之前介绍了python中的对象.但是对于编写扩展模块来讲还远远不够,因为里面还需要有python中模块的知识,比如:如何创建一个模块.如何初始化python环境等等.因此我们还需要了解一些前奏的知识,如果你的python基础比较好的话,那么我相信你一定能看懂,当然我们一开始只是介绍一个大概,至于细节方面我们会在真正编写扩展模块的时候会说. 关于使用C为python编写扩展模块,我前面还有一篇博客,强烈建议先去看那篇博客,对你了解Pytho