首页 > 代码库 > python——从datetime模块探索python的数据架构
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:\Python33\Lib\datetime.py
def _cmp(x, y): return 0 if x == y else 1 if x > y else -1MINYEAR = 1MAXYEAR = 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()>>> adatetime.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)
总结:
- 类方法可能需要传入参数,也可能不需要参数,但参数肯定不是类的实例。
- 实例方法则相反,需要传入一个类实例作为参数,具体方法有两种(或更多?)。
这让我意识到之前的一篇博文是关于Python的静态方法和类成员方法的(http://www.cnblogs.com/Simon-xm/p/3890942.html)。
这里搜索可知python有,实例方法、静态方法、类方法、类变量、实例变量。地址:http://www.cnblogs.com/Simon-xm/p/3935809.html
python——从datetime模块探索python的数据架构