了解Python中变量和函数名的下划线,例如__init __()

时间:2019-07-19 16:54:51

标签: python-3.x

我开始学习python,并已涵盖了基本知识。我现在开始使用类函数,它具有许多__init以及我无法理解的所有内容。谁能解释一下。我正在写我从我所指的书中写的代码

好吧,我尝试阅读有关内容,但没有我能理解的地方。

class Circle1:
    def __init__(self, radius):
        self,radius = radius
    def setRadius(self, newValue):
        if newValue >= 0:
            self.__radius = newValue
        else:
            raise ValueError('Value must be positive')
    def area(self):
        return 3.14159 * (self.__radius ** 2)

class Circle2:
    def __init__(self, radius):
        self.radius = radius

    def __setRadius(self, newValue):
        if newValue >= 0:
            self.__radius = newValue
        else:
            raise ValueError("Value must be positive")
    radius = property(None, set_Radius)

    @property
    def area(self):
        return 3.14159 * (self.radius ** 2)

1 个答案:

答案 0 :(得分:0)

__init__()函数只是您的类的构造函数。 Python需要选择某种东西作为构造函数,然后选择__init__()。因此,在您的示例中,如果要创建半径为5的Cirlce1的实例,您将像这样进行操作:

myCircle = Circle1(5)

我们从未定义过Circle1()函数,但是我们可以通过使用类似函数的类来构建实例,该类将由于Circle1函数而返回__init__()实例。然后,您可以进行诸如更改半径并使用myCircle获取面积的操作。

__radius会稍微改变变量的处理方式,但是它将像没有双下划线标头的变量一样工作。如果您想了解有关双下划线标头的更多信息,此问题将提供一个很好的答案:Why do some functions have underscores "__" before and after the function name?

除了解释之外,我还在您的代码中发现了一些问题:

  • 此行:self,radius = radius应该读为self.radius = radius

  • 现在,您似乎可以交替使用self.radiusself.__radius,因为它们是两个单独的变量,因此它们将无法提供所需的功能。