zoukankan      html  css  js  c++  java
  • 【python学习笔记】python中的模块,类,函数,对象,实例(与JAVA的比较)

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

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

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

    >>> 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:python34libzipfile.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的鸡、蛋关系里就能察觉出来。

    具体可见《python中的类型关系和继承关系》以及《python类型和对象》:

    http://developer.zdnet.com.cn/2008/0521/874673.shtml

    http://wenku.baidu.com/link?url=qFUbnlpt_YuQwNdsiLpaDBs10CwX48MyCWwvOUIf3t66LLCDoZk9mnTX1hJm0viY2Q1rlWQb3i4TBdOJ7DnkVQyJKvGAH1Av2NjWUFph7Fm

    个人想法,还有许多纰漏,还望大家指正。

    欢迎关注我的微博:@机器学习日记 https://weibo.com/6382778167/profile?rightmod=1&wvr=6&mod=personinfo
  • 相关阅读:
    HCNP Routing&Switching之BGP路由过滤和ASPathFilter Linux
    HCNP Routing&Switching之组播技术组播基础 Linux
    HCNP Routing&Switching之组播技术组播地址 Linux
    HCNP Routing&Switching之组播技术组播协议IGMP Linux
    HCNP Routing&Switching之BGP团体属性和团体属性过滤器 Linux
    pcanet网络理解
    OpenAPITools 实践
    React MobX 开始
    PDFium 渲染
    PDF.js Electron Viewer
  • 原文地址:https://www.cnblogs.com/danscarlett/p/3963121.html
Copyright © 2011-2022 走看看