【发布时间】:2018-02-02 08:29:28
【问题描述】:
如果我有这样的课程:
class A:
def __init__(self):
self.a = 1
obj = A()
obj.b = 2
因为我需要编写一个 __setattr__ 方法来修改属性(例如,如果它是在 __init__ 内部定义的,那么做一些事情;如果它是在 外部定义的__init__ 做别的事情。如何确定它是否在 init 中声明?
def __setattr__(self,name,value):
if name not in self.__dict__:
self.__dict__['ABC'+ name] = value # add 'ABC' before attribute's name if it was declared in __init__
else:
self.__dict__[name] = value # if it was declared outside __init__ then the attribute name doesn't change
【问题讨论】:
-
你的用例是什么?定义属性的位置没有区别。
-
Python 如此出色的部分原因在于几乎没有特殊情况。
self.a = ...使用与obj.b = ...完全相同的机制...... -
@Daniel Roseman,哦,这就像属性是在 init 中定义的(即名称以 'ABC' 开头,然后当类外的方法尝试更改它们时引发错误
-
这不是一个用例。它仍然描述了您的解决方案,而不是要解决的根本问题。
标签: python python-3.x