Python方法名称和变量名称关系

时间:2017-03-22 05:22:03

标签: python

我正在阅读python tutorial

变量名pinA与方法名称getPinA()有什么关系,它与scala中的自动getter setter类似。

class BinaryGate(LogicGate):

    def __init__(self,n):
        LogicGate.__init__(self,n)

        self.pinA = None
        self.pinB = None

    def getPinA(self):
        return int(input("Enter Pin A input for gate "+ self.getLabel()+"-->"))

    def getPinB(self):
        return int(input("Enter Pin B input for gate "+ self.getLabel()+"-->"))

1 个答案:

答案 0 :(得分:0)

  

它类似于scala中的自动getter setter。

不是真的。 self.pinA = None会将pinA设为None。对getPinA()的任何调用都将始终使用input()函数,并且永远不会查找self.pinA值。

Python并没有完全拥有"封装"像那些JVM语言。换句话说,你总是可以访问属性,所以" getter& setter功能"不需要。

但是,您可以使用@property,这类似于实现具有基础值的getter的方法。

class BinaryGate(LogicGate):

    def __init__(self,n):
        LogicGate.__init__(self,n)
        self._pinA = None

    @property
    def pinA(self):
        if self._pinA is None:
            self._pinA = int(input("Enter Pin A input for gate "+ self.getLabel()+"-->"))
        return self._pinA

您可以在此处详细了解一些Python conventions