方法链接和访问变量

时间:2017-04-20 09:16:14

标签: python method-chaining

我认为通过一个简单的例子来解释我想要实现的目标更容易。请考虑以下代码:

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却感到惊讶我以前。

1 个答案:

答案 0 :(得分:2)

简短回答:不要。您将遇到问题,使用/读取您的代码的每个人都会遇到问题,而且您花在实施它上面的时间也不值得。

答案很长:如果你绝对必须,你可以创建一个在调用时设置属性值的类,否则模仿值的行为。要执行此操作,您必须覆盖所有 magic methods,即使这样print(type(p.age))之类的内容也不会产生{{1}的预期输出}。

这是一个让您入门的片段(仅实施了<class 'int'>方法):

__eq__