我正在尝试用Python编写一些(在我看来)可读的代码。我需要一个包含许多类的模块。理论上,我知道实现这一点所需的一切:我可以简单地将类定义放在一个模块文件中。

为了便于阅读,我想将每个类定义放在单独的文件中(它们开始变得很长!)将所有这些类放到一个目录中。每当我创建新文件时,尽管它的内容在我需要它们的地方是可见的,但是在其中的类定义的作用域是不需要的模块。

我该怎么做?"python"是怎么做到的?

在__init__.py中全部导入,然后让消费者导入包。

from .module1 import Class1

from .module2 import Class2

...

前面的点是什么意思?

@samuil:python.org/dev/peps/pep-0328

遗憾的是,我只能使用Python2.4,因为脚本将在第三方嵌入式设备上运行。这个点符号在旧版本中似乎不起作用。我已经用这些子模块的完整路径替换了它。

如果希望避免在许多地方对完整路径、文件、类和函数名进行硬编码,可以执行如下操作:动态导入(几乎)它在包的子目录中找到的所有python文件。

关键是要记住,__init__.py文件本身是一个很大程度上不受约束的python脚本,因此可以自由地执行相当复杂的处理,以确定包的名称空间中有什么。

文件package\__init__.py:

def _import_package_files():

""" Dynamically import all the Python modules in this module's sub directory."""

import os

import sys

import traceback

package_path = os.path.split(__file__)[0]

package_directory = os.path.split(package_path)[1]

for fn in os.listdir(package_directory):

globals_, locals_ = globals(), locals()

# process all python files in directory that don't start with underscore

if fn[0] != '_' and fn.split('.')[-1] in ('py', 'pyw'):

modulename = fn.split('.')[0] # filename without extension

subpackage =".".join([package_directory, modulename])

try:

module = __import__(subpackage, globals_, locals_, [modulename])

except:

traceback.print_exc(file=sys.stdout)

raise # reraise exception

_import_package_files()

文件package\Class1.py:

class Class1(object):

pass

文件package\Class2.py:

class Class2(object):

pass

文件package\Class3.py:

class Class3(object):

pass

文件usepackage.py:

import package

print(package.Class1)

print(package.Class2)

print(package.Class3)

运行usepackage.py的输出:

这太棒了。在python 3.4.1中工作。

python 类命名空间,关于python:命名空间和类相关推荐

  1. day24 python学习 类 画元,命名空间作用域,组合,人狗大战升级

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

  2. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...

  3. Python零基础教程:函数和类内建魔法属性

    前言 关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性. 查看内建属性 class Person(object):passdef ...

  4. python语言用什么关键字来声明一个类_python使用什么关键字定义类

    什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下:class ...

  5. Python基础-作用域和命名空间(Scope and Namespace)

    在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 ...

  6. Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类

    目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...

  7. 零基础学python编程思维(九) | 面向对象的编程——类

    对象可以包含任意数量和类型的数据.Python在尽可能不增加新的语法和语义的情况下加入了类机制,类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以 ...

  8. 11. python入门复习教程之命名空间与作用域,再谈异常,标准库,持久化与序列化

    如果你学习 python 一段时间之后,会经常碰到命名空间,作用域 这两个名词,接下来咱们就从这两个名词开始入手,展开这篇博客. 命名空间与作用域 命名空间是指对象所处的位置,命名二字一般指的是变量名 ...

  9. Python学习笔记(九):类和对象

    Python学习笔记(九):类和对象 关于类和对象 Python学习笔记(九):类和对象 一.类和对象 类的定义 类的实例化 类对象的使用 二.self用法 三.类方法 实例方法 类方法 静态方法 静 ...

  10. 类的继承python事例_【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸...

    作者:白宁超 2016年10月10日22:36:57 摘要:继一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简 ...

最新文章

  1. 解决虚拟器device support x86 but apk only supports armeabi-v7
  2. uniapp 长链接 socket 封装
  3. 小程序向Java传值,微信小程序 页面传值详解
  4. mysql怎么用sb文件_mysql脚本mysql_safe解释、mysql.sock文件、mysql_install_db
  5. linux之安装frida遇到的问题
  6. mysql自增id获取失败
  7. 数据库新增幂等操作_使用数据库唯一键实现事务幂等性
  8. Winform中创建超链接,点击跳转网页
  9. 网吧的云计算机,云电脑和网吧开启线上网咖是新趋势?
  10. 中国著名的D版和破解软件下载网站(转)
  11. 电子技术基础(三)_第4章直流稳压电源__集成稳压器
  12. 【MVO MTSP】基于matlab灰狼算法求解多旅行商问题(同始终点)【含Matlab源码 1564期】
  13. 基于Spring MVC + Spring + MyBatis的【银行卡系统】
  14. android与pc的连接
  15. 归并排序---------数构
  16. H3C无线控制器支持的认证方式
  17. PPI是什么?pixels per inch像素密度是什么?PPI如何计算?
  18. 微雪2.9寸墨水屏在普中Z100(stm32f103zet6)板上点亮
  19. 2009-9-17 关于扮猪吃虎
  20. [项目实战] 云知梦Laravel5.4电商实战项目VIP视频教程

热门文章

  1. 关于指令执行周期的细节思考
  2. 中序遍历+后序/先序遍历构建二叉树
  3. 监控视频异常检测数据集整理
  4. python 实现SOM:代码注释与应用示例
  5. cocos+kbe问题记录
  6. RabbitMq初探——Hello World
  7. TCP/IP协议学习(五) 基于C# Socket的C/S模型
  8. 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
  9. iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
  10. Python的Base64编码图片(转载)