类 in Python - 何时使用括号

Classes in Python - when to use parentheses

class Example:
    def __init__(self, sides, name):
        self.sides = sides 
        self.name = name

为什么下面的附加属性(interior_angles和角度)没有在括号中定义,然后在函数中写出来?

class Example:
    def __init__(self, sides, name):
        self.sides = sides 
        self.name = name
        self.interior_angles = (self.sides-2)*180
        self.angle = self.interior_angles/self.sides 

我还看到一些属性是在括号内定义的。在什么情况下你应该这样做?例如:

class Dyna_Q:
    def __init__(self, environment, alpha = alpha, epsilon = epsilon, gamma = gamma):

谢谢。

__init__方法是对象的构造函数。这意味着他的参数是您初始化每个对象实例所需的基本参数。

另一方面,“interior_angles”和“角度”是根据边计算的属性。

编程中的正则括号 () 通常与它们在数学中的用法非常相似:将内容组合在一起并更改运算顺序。

4 - 2 == ( 4 - 2 )

会是真的,但是

(4 - 2) / 2 == 4 - 2 / 2

不会。此外,正如您正确观察到的那样,它们基本上用于告诉解释器函数名称结束和参数开始的位置,因此在函数定义的情况下,它们位于名称之后和 : 之前。上一个示例中的赋值并不是真正的赋值,而是默认值;我假设你的范围内有全局变量 alpha 等等,这就是为什么它有效。

那么什么时候使用括号呢?例如:

  • 当您想更改操作顺序时。
  • 当你想调用或定义一个函数时。
  • 当你想定义一个 class class Myclass(MyBaseClass): ...
  • 的继承时
  • 有时是元组,尽管 return a, breturn (a,b) 是同一回事。
  • 与数学一样,可以使用额外的括号来明确运算顺序,例如(4-2) == (4-2) 显示计算在比较之前完成。

在python的构造函数中,'self'指向当前要创建的对象

您的问题: 为什么下面的附加属性(interior_angles和角度)没有定义在括号里,然后在函数里写出来?

事实是,如果您有一个现成的值要在新创建的对象中设置,您将将该值传递给括号内的构造函数。

但是,如果您不知道要放入新对象中的值,并且还需要计算该值,则不会传递括号内的值。

核心是理解'self'关键字。 如果您执行 self. = ,您将在对象中创建一个新的 属性(字段)。