在学习JAVA的时候涉及到了类,对象,方法,域等基本概念。类像一个盒子一样包含各种域和访问更改这些域的方法,而对象是类的特例,比如老师和张老师的关系,老师是一个类,而张老师是一个对象。OOP的关键就是类和对象的使用。

在我学习Python的时候,对模块和类的概念与关系不以为意,在开始动手写脚本的时候不知不觉就昏了头,查阅了些许资料,现写一些小小总结。

为了方便叙述,引入zipfile这个模块的描述,代码比较长,但我们只关心其中大致包含了哪些内容:

python如何查看当前模块的路径 python如何查看模块中的函数_python如何查看当前模块的路径

python如何查看当前模块的路径 python如何查看模块中的函数_python如何查看当前模块的路径_02

>>> import zipfile
>>> help(zipfile)
Help on module zipfile:

NAME
    zipfile - Read and write ZIP files.

DESCRIPTION
    XXX references to utf-8 need further investigation.

CLASSES
    builtins.Exception(builtins.BaseException)
        BadZipFile
        LargeZipFile
    builtins.object
        ZipFile
            PyZipFile
        ZipInfo
    
    class BadZipFile(builtins.Exception)
     |  Method resolution order:
     |      BadZipFile
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.Exception:
     |  
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |  
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |  
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |  
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |  
     |  __reduce__(...)
     |  
     |  __repr__(self, /)
     |      Return repr(self).
     |  
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |  
     |  __setstate__(...)
     |  
     |  __str__(self, /)
     |      Return str(self).
     |  
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |  
     |  __cause__
     |      exception cause
     |  
     |  __context__
     |      exception context
     |  
     |  __dict__
     |  
     |  __suppress_context__
     |  
     |  __traceback__
     |  
     |  args
    
    BadZipfile = class BadZipFile(builtins.Exception)
     |  Method resolution order:
     |      BadZipFile
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.Exception:
     |  
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |  
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |  
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |  
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |  
     |  __reduce__(...)
     |  
     |  __repr__(self, /)
     |      Return repr(self).
     |  
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |  
     |  __setstate__(...)
     |  
     |  __str__(self, /)
     |      Return str(self).
     |  
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |  
     |  __cause__
     |      exception cause
     |  
     |  __context__
     |      exception context
     |  
     |  __dict__
     |  
     |  __suppress_context__
     |  
     |  __traceback__
     |  
     |  args
    
    class LargeZipFile(builtins.Exception)
     |  Raised when writing a zipfile, the zipfile requires ZIP64 extensions
     |  and those extensions are disabled.
     |  
     |  Method resolution order:
     |      LargeZipFile
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.Exception:
     |  
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |  
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |  
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |  
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |  
     |  __reduce__(...)
     |  
     |  __repr__(self, /)
     |      Return repr(self).
     |  
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |  
     |  __setstate__(...)
     |  
     |  __str__(self, /)
     |      Return str(self).
     |  
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |  
     |  __cause__
     |      exception cause
     |  
     |  __context__
     |      exception context
     |  
     |  __dict__
     |  
     |  __suppress_context__
     |  
     |  __traceback__
     |  
     |  args
    
    class PyZipFile(ZipFile)
     |  Class to create ZIP archives with Python library files and packages.
     |  
     |  Method resolution order:
     |      PyZipFile
     |      ZipFile
     |      builtins.object
     |  
     |  Methods defined here:
     |  
     |  __init__(self, file, mode='r', compression=0, allowZip64=True, optimize=-1)
     |  
     |  writepy(self, pathname, basename='', filterfunc=None)
     |      Add all files from "pathname" to the ZIP archive.
     |      
     |      If pathname is a package directory, search the directory and
     |      all package subdirectories recursively for all *.py and enter
     |      the modules into the archive.  If pathname is a plain
     |      directory, listdir *.py and enter all modules.  Else, pathname
     |      must be a Python *.py file and the module will be put into the
     |      archive.  Added modules are always module.pyo or module.pyc.
     |      This method will compile the module.py into module.pyc if
     |      necessary.
     |      If filterfunc(pathname) is given, it is called with every argument.
     |      When it is False, the file or directory is skipped.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from ZipFile:
     |  
     |  __del__(self)
     |      Call the "close()" method in case the user forgot.
     |  
     |  __enter__(self)
     |  
     |  __exit__(self, type, value, traceback)
     |  
     |  close(self)
     |      Close the file, and for mode "w" and "a" write the ending
     |      records.
     |  
     |  extract(self, member, path=None, pwd=None)
     |      Extract a member from the archive to the current working directory,
     |      using its full name. Its file information is extracted as accurately
     |      as possible. `member' may be a filename or a ZipInfo object. You can
     |      specify a different directory using `path'.
     |  
     |  extractall(self, path=None, members=None, pwd=None)
     |      Extract all members from the archive to the current working
     |      directory. `path' specifies a different directory to extract to.
     |      `members' is optional and must be a subset of the list returned
     |      by namelist().
     |  
     |  getinfo(self, name)
     |      Return the instance of ZipInfo given 'name'.
     |  
     |  infolist(self)
     |      Return a list of class ZipInfo instances for files in the
     |      archive.
     |  
     |  namelist(self)
     |      Return a list of file names in the archive.
     |  
     |  open(self, name, mode='r', pwd=None)
     |      Return file-like object for 'name'.
     |  
     |  printdir(self, file=None)
     |      Print a table of contents for the zip file.
     |  
     |  read(self, name, pwd=None)
     |      Return file bytes (as a string) for name.
     |  
     |  setpassword(self, pwd)
     |      Set default password for encrypted files.
     |  
     |  testzip(self)
     |      Read all the files and check the CRC.
     |  
     |  write(self, filename, arcname=None, compress_type=None)
     |      Put the bytes from filename into the archive under the name
     |      arcname.
     |  
     |  writestr(self, zinfo_or_arcname, data, compress_type=None)
     |      Write a file into the archive.  The contents is 'data', which
     |      may be either a 'str' or a 'bytes' instance; if it is a 'str',
     |      it is encoded as UTF-8 first.
     |      'zinfo_or_arcname' is either a ZipInfo instance or
     |      the name of the file in the archive.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from ZipFile:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  comment
     |      The comment text associated with the ZIP file.
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes inherited from ZipFile:
     |  
     |  fp = None
    
    class ZipFile(builtins.object)
     |  Class with methods to open, read, write, close, list zip files.
     |  
     |  z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=True)
     |  
     |  file: Either the path to the file, or a file-like object.
     |        If it is a path, the file will be opened and closed by ZipFile.
     |  mode: The mode can be either read "r", write "w" or append "a".
     |  compression: ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib),
     |               ZIP_BZIP2 (requires bz2) or ZIP_LZMA (requires lzma).
     |  allowZip64: if True ZipFile will create files with ZIP64 extensions when
     |              needed, otherwise it will raise an exception when this would
     |              be necessary.
     |  
     |  Methods defined here:
     |  
     |  __del__(self)
     |      Call the "close()" method in case the user forgot.
     |  
     |  __enter__(self)
     |  
     |  __exit__(self, type, value, traceback)
     |  
     |  __init__(self, file, mode='r', compression=0, allowZip64=True)
     |      Open the ZIP file with mode read "r", write "w" or append "a".
     |  
     |  close(self)
     |      Close the file, and for mode "w" and "a" write the ending
     |      records.
     |  
     |  extract(self, member, path=None, pwd=None)
     |      Extract a member from the archive to the current working directory,
     |      using its full name. Its file information is extracted as accurately
     |      as possible. `member' may be a filename or a ZipInfo object. You can
     |      specify a different directory using `path'.
     |  
     |  extractall(self, path=None, members=None, pwd=None)
     |      Extract all members from the archive to the current working
     |      directory. `path' specifies a different directory to extract to.
     |      `members' is optional and must be a subset of the list returned
     |      by namelist().
     |  
     |  getinfo(self, name)
     |      Return the instance of ZipInfo given 'name'.
     |  
     |  infolist(self)
     |      Return a list of class ZipInfo instances for files in the
     |      archive.
     |  
     |  namelist(self)
     |      Return a list of file names in the archive.
     |  
     |  open(self, name, mode='r', pwd=None)
     |      Return file-like object for 'name'.
     |  
     |  printdir(self, file=None)
     |      Print a table of contents for the zip file.
     |  
     |  read(self, name, pwd=None)
     |      Return file bytes (as a string) for name.
     |  
     |  setpassword(self, pwd)
     |      Set default password for encrypted files.
     |  
     |  testzip(self)
     |      Read all the files and check the CRC.
     |  
     |  write(self, filename, arcname=None, compress_type=None)
     |      Put the bytes from filename into the archive under the name
     |      arcname.
     |  
     |  writestr(self, zinfo_or_arcname, data, compress_type=None)
     |      Write a file into the archive.  The contents is 'data', which
     |      may be either a 'str' or a 'bytes' instance; if it is a 'str',
     |      it is encoded as UTF-8 first.
     |      'zinfo_or_arcname' is either a ZipInfo instance or
     |      the name of the file in the archive.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  comment
     |      The comment text associated with the ZIP file.
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  fp = None
    
    class ZipInfo(builtins.object)
     |  Class with attributes describing each file in the ZIP archive.
     |  
     |  Methods defined here:
     |  
     |  FileHeader(self, zip64=None)
     |      Return the per-file header as a string.
     |  
     |  __init__(self, filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  CRC
     |  
     |  comment
     |  
     |  compress_size
     |  
     |  compress_type
     |  
     |  create_system
     |  
     |  create_version
     |  
     |  date_time
     |  
     |  external_attr
     |  
     |  extra
     |  
     |  extract_version
     |  
     |  file_size
     |  
     |  filename
     |  
     |  flag_bits
     |  
     |  header_offset
     |  
     |  internal_attr
     |  
     |  orig_filename
     |  
     |  reserved
     |  
     |  volume
    
    error = class BadZipFile(builtins.Exception)
     |  Method resolution order:
     |      BadZipFile
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.Exception:
     |  
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |  
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |  
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |  
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |  
     |  __reduce__(...)
     |  
     |  __repr__(self, /)
     |      Return repr(self).
     |  
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |  
     |  __setstate__(...)
     |  
     |  __str__(self, /)
     |      Return str(self).
     |  
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |  
     |  __cause__
     |      exception cause
     |  
     |  __context__
     |      exception context
     |  
     |  __dict__
     |  
     |  __suppress_context__
     |  
     |  __traceback__
     |  
     |  args

FUNCTIONS
    is_zipfile(filename)
        Quickly see if a file is a ZIP file by checking the magic number.
        
        The filename argument may be a file or file-like object too.

DATA
    ZIP_BZIP2 = 12
    ZIP_DEFLATED = 8
    ZIP_LZMA = 14
    ZIP_STORED = 0
    __all__ = ['BadZipFile', 'BadZipfile', 'error', 'ZIP_STORED', 'ZIP_DEF...

FILE
    d:\python34\lib\zipfile.py

View Code

 

可以看到,Help on zipfile module列出了zipfile的六个属性:NAME,DESCRIPTION,CLASSES,FUNCTIONS,DATA,FILE。

函数是可以重用的代码,而模块就是可以重用的函数与变量的集合。和JAVA的严谨不一样,你可以往模块中放许多东西,类,定义的函数,甚至独立的域。一个模块对应一个.py文件。每个python程序也是一个模块。JAVA的.java文件是把一个或者多个封装得很好的类放在同一个.java文件中。一个JAVA程序总是在类里找到main入口开始运行。由此看来,.py和.java文件在内容和作用上都有很大差别。从某种意义上来说,.py文件更加像C中的头文件(只是头文件不能运行)。

有意思的是,在python中,一切都是对象,包括函数,数据域,数值等等。所以,模块就是一个盛了很多对象的容器。这个容器被标好标码,你可以通过路径和名字找到它,查阅上面的标码从中拿到你想要的对象,访问、使用或者更改它们。

而类就是小的容器,也是模块的一部分。不同的是,一个类可以衍生出很多很多类。而模块被import之后就只有一个了。

python似乎并不像JAVA一样强调 类和对象的关系,反而强调 对象和对象的关系 以及 对象和实例的关系,这一点让习惯使用JAVA的人有些迷惑。对python而言,“其实都是实例化的”。python的类关系向一棵树,每个叶子之间有两种导航关系:1 子类继承父类;2 子类构建实例。这一点,从type和object的鸡、蛋关系里就能察觉出来。