python类和模块区别,python命名空间
在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命名空间的更多相关文章
- Python类、模块、包的区别
类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...
- python 类、模块、包的区别
学习python的时候,碰到了import 和 from xx import xx的问题, 为了弄清楚什么是 module 和package ,这篇文章讲解的不错!! 原文: http://www.c ...
- Python json pickle 模块 区别
json 支持 str.list.dict.int.tuple 数据类型 pickle 支持Python所有里的所有数据类型 缺点: 只能在Python使用 总结: 1.JSON只能处理基本数据类型. ...
- python用WMI模块获取系统命名空间
可以和winmgmts的查询页面对应 from win32com.client import GetObject import pywintypes result=[] def enum_namesp ...
- python——从datetime模块探索python的数据架构
问题出现于我试图向自建网页中加入实时时间开始. 我之前已经知道python中有有关事件和日期的模块datetime.以下导入datetime并作实验. >>> import date ...
- python基础===jieba模块,Python 中文分词组件
api参考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安装自行百度 基本用法: import jieba #全模式 word = j ...
- Python 进阶_模块 & 包
目录 目录 模块的搜索路径和路径搜索 搜索路径 命名空间和变量作用域的比较 变量名的查找覆盖 导入模块 import 语句 from-import 语句 扩展的 import 语句 as 自动载入模块 ...
- 基于Python的datetime模块和time模块源码阅读分析
目录 1 前言 2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
随机推荐
- 线程的几种状态转换<转>
线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法. ...
- Android——事务
一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结 ...
- javascript 60行编写的俄罗斯方块游戏
转自 http://***/share/1759652641295360.htm <!doctype html><html><head></head>& ...
- elasticsearch之kibana安装
我用的elasticsearch版本是5.2.2的,kibana也要对应的版本 下载kibana 下载网址:https://artifacts.elastic.co/downloads/kibana/ ...
- 自适应瀑布型布局(手机,PC全兼容)
有个瀑布型的布局需求,于是找了下,网上大部分用jquery控件,界面太复杂,看起来很笨重,我需求比较简单,于是只能自己写 其实原理就是用cs 去控制,那么我们只需要把对应的界面去规划就行了,比如,我一 ...
- 【jquery】ajax 请求成功后新开窗口被拦截解决方法
问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以 ...
- ASP.NET Core 2.0使用Log4net实现记录日志功能
一.安装Log4net 1.使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安装,如下图所示: 2.使用程序包管理器控制台 ...
- ssh 断开解决办法
SSH连接总是隔一段时间没有输入时就断开,解决办法如下: 服务端配置sudo vi /etc/ssh/sshd_configClientAliveInterval 60 #服务端主动向客户端请 ...
- js json处理 双引号
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象 JSON字符串: var str1 = '{ "name": "cxh", ...
- Java BEAN与EJB的区别
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以 ...