python核心编程第13章代码例子twrapme.py的疑问?
本文介绍了python核心编程第13章代码例子twrapme.py的疑问?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
授权之后,声明一个示例t,实例中属性_TimedWrapMe__mtime是怎么来的?
书中源程序:
from time import time, ctime
class TimedWrapMe(object):
def __init__(self, obj):
self.__data = obj
self.__ctime = self.__mtime = self.__atime = time()
def get(self):
self.__atime = time()
return self.__data
def gettimeval(self, t_type):
if not isinstance(t_type, str) or \
t_type[0] not in 'cma':
raise TypeError, \
"argument of 'c', 'm', or 'a' req'd"
return getattr(self, '_%s__%stime' % \
(self.__class__.__name__, t_type[0]))
def gettimestr(self, t_type):
return ctime(self.gettimeval(t_type))
def set(self, obj):
self.__data = obj
self.__mtime = self.__atime = time
def __repr__(self):
self.__atime = time()
return 'self.__data'
def __str__(self):
self.__atime = time()
return str(self.__data)
def __getattr__(self, attr):
self.__atime = time()
return getattr(self.__data, attr)
>>> from twrapme import TimedWrapMe
>>> t = TimedWrapMe(923)
>>> dir(t)
['_TimedWrapMe__atime', '_TimedWrapMe__ctime', '_TimedWrapMe__data', '_TimedWrapMe__mtime', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get', 'gettimestr', 'gettimeval', 'set']
解决方案
Python内部的私有变量(下划线开头的变量)不是真的私有变量
举个文档里的例子
__spam
被处理成了公有变量_类名__spam
同理_TimedWrapMe__mtime
来自__mtime
也就是 self.__ctime = self.__mtime = self.__atime = time()
这句来的
这篇关于python核心编程第13章代码例子twrapme.py的疑问?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文