我认为通过一个简单的例子来解释我想要实现的目标更容易。请考虑以下代码:
class Person(object):
def __init__(self):
self._age = None
self._gender = None
def age(self, value):
self._age = value
return self
def gender(self, value):
self._gender = value
return self
p = Person().age(10).gender("male")
assert p.age == 10
assert p.gender == "male"
显然断言失败是因为属性是指方法而不是变量。 我已经尝试搞乱__getattribute__方法,以便它将“age”解析为“_age”,但我似乎无法找到两种情况都有效的方法,而且我并不完全确定它是否可行,但Python却感到惊讶我以前。
答案 0 :(得分:2)
简短回答:不要。您将遇到问题,使用/读取您的代码的每个人都会遇到问题,而且您花在实施它上面的时间也不值得。
答案很长:如果你绝对必须,你可以创建一个在调用时设置属性值的类,否则模仿值的行为。要执行此操作,您必须覆盖所有 magic methods,即使这样print(type(p.age))
之类的内容也不会产生{{1}的预期输出}。
这是一个让您入门的片段(仅实施了<class 'int'>
方法):
__eq__