在python中,类可以提供模块级别之下的命名空间。

如果一个模块写很多函数,某些函数之间共同完成一组功能,用类会看起来更清晰,在调用时候也会更好,对于ide补全有更小范围的限定提示。

类提供 继承 组合 多重实例  通过继承进行定制 运算符重载(就是类的双下划线方法__del__ __call__ __str__ __iter__  ........)。

类和模块都可以建立命名空间树,模块中的功能叫函数,类中的一般称为方法。

python中模块的方法也可以像类一样被继承和定制。

下面是两个文件。

modulea.py

# coding=utf8

x = 1

def fun1():
print 'modulea',x def fun2():
print 'modulea',x*2

moduleb.py

# coding=utf8

import modulea

print modulea.__dict__
modulea.fun1()
modulea.fun2() def fun1():
print 'moduleb',modulea.x*10 modulea.x = 11
modulea.fun1 = fun1 print '替换后' modulea.fun1()
modulea.fun2()

运行noduleb.py


modulea.fun1()
modulea.fun2()
这种方法和类实例调用方法形式上一样
modulea的fun1函数被改变了,类似类继承。

如果使用类,里面是
class A(object):
def __init__(self,x):
self.x = x def fun1(self):
print self.x * 1 def fun2(self):
print self.x * 2

这样在x在初始化赋值和继承修改fun1更方便,类是一个对象工厂,可以产生多重实例,使用上面模块的方式就不行。但最简单的单利模式就是使用模块,例如a模块有一个b对象,其余所有py文件中都import a,使用a.b来操作a,这就达到天然的单例模式了;但要注意的是一定要import a ,a.b这种用法,不可使用from a import b,然后操作b,这样会使b脱离了a的命名空间,每个py文件中的b对象将是不同的了,就不是单例模式了。

类还提供了运算符重载,这是模块方式不具备。

实例属性,在类中的所有普通方法(带self的方法)始终是操作同一个变量,

使用模块时候,在函数中操作同一个变量,变量必须是全局变量,函数里面的局部变量会比全局变量优先。

在一个大文件中,分成几个类是必须的,更清晰的结构,不至于全局变量到处是,和函数过多结构不清晰。

面向对象和面向过程的区别是   狗.吃屎 和 吃.狗屎,使用面向对象在别处调用时候那就是个爽快,在调用时候比写的时候体现得明显。

使用类怎么模拟模块的行为。那就是模块里面的一个类全部使用staticmetod,由类来提供命名空间。

例如

class Bb:

    @staticmethod
def fun1(a):
print a *1 @staticmethod
def fun2(a,b):
return a+b print Bb.fun2(1,2)

stackflow上说明,这种情况不要使用这种全部静态方法,使用模块加函数就可以了。


模块 + 全局变量 + 函数 类似于  类 + 属性 + 方法的单例模式类。

python类和模块区别,python命名空间的更多相关文章

  1. Python类、模块、包的区别

    类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...

  2. python 类、模块、包的区别

    学习python的时候,碰到了import 和 from xx import xx的问题, 为了弄清楚什么是 module 和package ,这篇文章讲解的不错!! 原文: http://www.c ...

  3. Python json pickle 模块 区别

    json 支持 str.list.dict.int.tuple 数据类型 pickle 支持Python所有里的所有数据类型 缺点: 只能在Python使用 总结: 1.JSON只能处理基本数据类型. ...

  4. python用WMI模块获取系统命名空间

    可以和winmgmts的查询页面对应 from win32com.client import GetObject import pywintypes result=[] def enum_namesp ...

  5. python——从datetime模块探索python的数据架构

    问题出现于我试图向自建网页中加入实时时间开始. 我之前已经知道python中有有关事件和日期的模块datetime.以下导入datetime并作实验. >>> import date ...

  6. python基础===jieba模块,Python 中文分词组件

    api参考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安装自行百度 基本用法: import jieba #全模式 word = j ...

  7. Python 进阶_模块 & 包

    目录 目录 模块的搜索路径和路径搜索 搜索路径 命名空间和变量作用域的比较 变量名的查找覆盖 导入模块 import 语句 from-import 语句 扩展的 import 语句 as 自动载入模块 ...

  8. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  9. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

随机推荐

  1. 代理ARP

    代理ARP是ARP协议的一个变种. 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答.代 ...

  2. WinForm 控件键盘消息处理剖析(转)

    一直想整理键盘事件的调用顺序,刚好看见园子里的这篇文章,写的不错,就转载了:http://www.cnblogs.com/tedzhao/archive/2010/09/07/1820557.html ...

  3. linux进程cpu资源分配命令nice,renice,taskset

    进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利.配置进程优先权对多任务环境的linux很有用,可以改善系统性能.还可以把进程运行到指定的CPU上,这样一来,把不 ...

  4. 15.01.29-MVC中用Areas分解项目

    在MVC项目上右键->新建->区域(Areas)...,将会自动生成Areas文件夹,并在文件夹下创建Model+Controller+View的mvc框架.在Views文件夹中,自动生成 ...

  5. 使用STC-ISP向KEIL添加STC芯片头文件

    第一步:打开“STC-ISP”软件. 第二步:点击右手边“Keil仿真设置”,然后点击“添加型号和头文件到Keil中添加STC仿真器驱动到Keil中”. 第三步:在弹出的“浏览文件夹”对话框中,找到你 ...

  6. Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 也许 "char*"类型的实参与"LPCWSTR"类型的形参不兼容

    http://www.myexception.cn/ruby-rails/1876106.html 选择“XXX项目”->“属性”->“配置属性”->“常规”选项中,把“使用 Uni ...

  7. 【原创】在VS2012中采用C++中调用DLL中的函数(4)

    这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...

  8. java的GUI程序的基本思路是以JFrame为基础

    JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化.最小化.关闭. JPanel – Java图形用户界面(GUI)工具包swing中的面 ...

  9. RNA_seq GATK 最佳实践

    GATK处理DNA 水平的snp 经验比较成熟,而RNA 水平较少,所以可能会存在错误 目前的流程兼顾了假阳性(不是真的snp位点)和假阴性(该位点是snp,却没有检测到):后续会不断改善     G ...

  10. Intellij MyBatisPlus Plugin插件破解

    1. 下载原始的MyBatisPlus Plugin插件. 2. 下载替换包,请根据实际版本下载: https://github.com/myoss/profile/tree/master/idea/ ...