zoukankan      html  css  js  c++  java
  • python——从datetime模块探索python的数据架构

    问题出现于我试图向自建网页中加入实时时间开始。

    我之前已经知道python中有有关事件和日期的模块datetime。以下导入datetime并作实验。

    >>> import datetime
    >>> type(datetime) <class 'module'>

    可知datetime属于module(模块)类。此外,类似的时间相关模块还有time和calendar。

    There are two kinds of date and time objects: “naive” and “aware”.——这里有两种类型于日期和时间有关的对象:自然对象 和 意识对象

    datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。

    ————————————————————————模块中可以还有常量————————————————————————————————

    探究datetime.MINYEAR和datetime.MAXYEAR源码:

    C:Python33Libdatetime.py 

    def _cmp(x, y):
        return 0 if x == y else 1 if x > y else -1
    
    MINYEAR = 1
    MAXYEAR = 9999
    _MAXORDINAL = 3652059 # date.max.toordinal()
    
    _DAYS_IN_MONTH = [None, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    _DAYS_BEFORE_MONTH = [None]
    dbm = 0

    注:def _cmp(x,y):单下划线函数。

    "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
    "双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。

    ————————————————————————————————————————————————————————————————————

    so,datetime是一个模块,从文件系统上看是一个.py文件。当然,模块也可以是一个还有__init__.py的文件夹。

    • class datetime.date 
    • class datetime.time
    • class datetime.datetime
    • class datetime.timedelta
    • class datetime.tzinfo
    • class datetime.timezone

    以上是datetime模块中的类,另外上述类的继承关系如下:

    object:
        timedelta
        tzinfo
            timezone
        time
        date
            datetime

    ————————————————————————————————————————————————————————————————————

    通过使用类似object_name=datetime.datetime_class(attr1,attr2,....)的语句,可以把上述datetime模块中的类实例化(instance)。

    官方文档里将datetime类成员分为:类方法(class methods)、类属性(Class attributes)、实例方法(Instance methods) 。

    关于类方法和实例方法的区别有如下代码作为实验:

    例:类方法datetime.today() 

    >>> a=datetime.datetime.today()
    >>> a
    datetime.datetime(2014, 8, 26, 19, 29, 27, 18840)
    >>> print(a)
    2014-08-26 19:29:27.018840
    >>> datetime.datetime.today()
    datetime.datetime(2014, 8, 26, 19, 29, 58, 992818)

    实例方法datetime.date()和datetime.replace()

    >>> a.date()                  #实例传入方法一
    datetime.date(2014, 8, 26)
    >>> datetime.datetime.date(a)         #实例传入方法二
    datetime.date(2014, 8, 26)
    >>> a.replace(2000,1,1)            #实例传入方法一
    datetime.datetime(2000, 1, 1, 19, 29, 27, 18840)
    >>> datetime.datetime.replace(a,1993,5,4)  #实例传入方法二
    datetime.datetime(1993, 5, 4, 19, 29, 27, 18840)

    总结:

    1. 类方法可能需要传入参数,也可能不需要参数,但参数肯定不是类的实例。
    2. 实例方法则相反,需要传入一个类实例作为参数,具体方法有两种(或更多?)。实例方法源码中的第一个参数默认为self,代指实例。

    这让我意识到之前的一篇博文是关于Python的静态方法和类成员方法的(http://www.cnblogs.com/Simon-xm/p/3890942.html)。

    这里搜索可知python有,实例方法、静态方法、类方法、类变量、实例变量。地址:http://www.cnblogs.com/Simon-xm/p/3935809.html

  • 相关阅读:
    ofbiz定时任务配置
    MySQL重置root密码
    谷歌默认最小字体解决方案
    CSS样式-文字在一行内显示不换行,超出部分用省略号(white-space、overflow、text-overflow、word-wrap、word-break)
    使用gulp自动化打包合并前端静态资源(CSS、JS文件压缩、添加版本号)
    JS判断两个日期是否为同一周
    AES、DES加解密方法(Java和JS编程)
    Nodejs代理解决开发环境下跨域问题
    js的垃圾收集机制以及写代码如何处理
    手机端黑屏时定时器无法执行
  • 原文地址:https://www.cnblogs.com/Simon-xm/p/3935812.html
Copyright © 2011-2022 走看看