【发布时间】:2018-07-04 01:53:39
【问题描述】:
我知道将属性设置为私有的一种快速方法是在属性之前使用__(稍后更正,因为这实际上是为了名称修改,而不是为了限制访问),或使用@property
但是,我发现对于一个 python 标准库模块,例如,datetime,这是以不同的方式设置的?
解释我的问题,请到the source code of datetime
我们以timedelta类为例:
class timedelta:
...
...
...
timedelta.min = timedelta(-999999999)
timedelta.max = timedelta(days=999999999, hours=23, minutes=59, seconds=59,
microseconds=999999)
timedelta.resolution = timedelta(microseconds=1)
类属性是在类之外设置的吗?为什么?
如果我:
import datetime
d= datetime.timedelta(days=1, hours=12)
print(d)
print(d.max) # >>> 999999999 days, 23:59:59.999999
print(type(d.max)) # >>> <class 'datetime.timedelta'>
d.max = 1000 # regardless of the reason, if I just want to do this
# >>> AttributeError: 'datetime.timedelta' object attribute 'max' is read-only
我想知道这个AttributeError 来自哪里?我在源代码的任何地方都找不到会引发此错误消息的地方?
谢谢!
【问题讨论】:
-
Python 中没有私有属性。双下划线名称修改会名称修改,它不限制访问。
-
@juanpa.arrivillaga 我知道事实上
__private伪装成_Class__private,所以它并不是真正的只读。这让我更加想知道他们如何设置它以使timedelta.max只读 -
@juanpa.arrivillaga 知道了,谢谢!
标签: python python-3.x oop