python类中的init_uuu和init_uuu之间有什么区别?

python类中的init_uuu和init_uuu之间有什么区别?,python,class,methods,initialization,Python,Class,Methods,Initialization,如果在类中使用uuu init_uuuuuu而不是init_uuuu,则不起作用。我只是好奇这两者之间有什么区别 这是一节课。但这真的不重要,因为它与init__;一起工作,与___;不一起工作。我知道这是一个打字错误,那就意味着我可以用任何方式调用它 class Point(namedtuple('Point', 'x, y, z')): 'class of a point as a tuple array' __slots__ = () # prevent creation of i

如果在类中使用uuu init_uuuuuu而不是init_uuuu,则不起作用。我只是好奇这两者之间有什么区别

这是一节课。但这真的不重要,因为它与init__;一起工作,与___;不一起工作。我知道这是一个打字错误,那就意味着我可以用任何方式调用它

class Point(namedtuple('Point', 'x, y, z')):
  'class of a point as a tuple array'
  __slots__ = () # prevent creation of instance dictionaries to save memory

  def init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z

  def __del__(self):
    'delete the Point'

  def __repr__(self):
    'Return a nicely formatted representation string'
    return '[%r, %r, %r]' % (self)

  def __str__(self):
    'printing format'
    return '%s[%r, %r, %r]' % (self.__class__.__name__,
                               self.x, self.y, self.z)

  def __add__(self, other):
    return Point(self.x + other.x, self.y + other.y, self.z + other.z)

  def __sub__(self, other):
    return Point(self.x - other.x, self.y - other.y, self.z - other.z)

  def __mul__(self, scal):
    'multiplication ny scalar'
    return Point(self.x * scal, self.y * scal, self.z * scal)

  def __div__(self, scal):
    'division ny scalar'
    if scal != 0.0:
        return Point(self.x / scal, self.y / scal, self.z / scal)
    else:
        sys.exit('Division by zero!')
我的问题是如何用两种不同的方式实例化一个对象?这样它工作得很好

如何解释这一点?

init在Python中没有特殊意义。这只是一种方法

__init_;是一种神奇的方法,在对象实例化时自动调用

如果init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这只是一种方法

__init_;是一种神奇的方法,在对象实例化时自动调用

如果init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。创建实例时,始终会调用它

init_;只是一个名称不可靠的类方法

您需要向我们展示您的代码;如果有一个名为_init _的方法出现故障,那么您就犯了一个错误。将其重命名为init_;只意味着它不会被自动调用,因此不会触发您的编码错误

在中,作者在评论中确实使用了_init _uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

__this is bold__
这是大胆的。请注意,该注释中也会丢失主注释上的尾随注释

在更新的代码中,您试图覆盖tuple子类的uuu init_uuu方法,这是一种特殊情况。通过将uuu init_uuu方法重命名为init_uu,您创建了一个不同的方法,并且根本没有遇到这个常见问题

有关这是一个问题的原因的更多详细信息,请参阅;您必须创建一个新的方法。是创建实例的工厂方法,然后初始化数据。但这对不可变类型(如namedtuple或tuple)不起作用,因为在工厂创建实例之后,不应该更改实例

在这种特定情况下,您根本不需要_init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。通过将uuu init_uuuu重命名为init_uuu,您可以使事情正常运行,但最终会得到一个您永远不会使用的无意义的init_uuu方法。只需删除它。

是用于初始化实例的钩子。创建实例时,始终会调用它

init_;只是一个名称不可靠的类方法

您需要向我们展示您的代码;如果有一个名为_init _的方法出现故障,那么您就犯了一个错误。将其重命名为init_;只意味着它不会被自动调用,因此不会触发您的编码错误

在中,作者在评论中确实使用了_init _uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

__this is bold__
这是大胆的。请注意,该注释中也会丢失主注释上的尾随注释

在更新的代码中,您试图覆盖tuple子类的uuu init_uuu方法,这是一种特殊情况。通过将uuu init_uuu方法重命名为init_uu,您创建了一个不同的方法,并且根本没有遇到这个常见问题

有关这是一个问题的原因的更多详细信息,请参阅;您必须创建一个新的方法。是创建实例的工厂方法,然后初始化数据。但这对不可变类型(如namedtuple或tuple)不起作用,因为在工厂创建实例之后,不应该更改实例


在这种特定情况下,您根本不需要_init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。通过将uuu init_uuuu重命名为init_uuu,您可以使事情正常运行,但最终会得到一个您永远不会使用的无意义的init_uuu方法。只需删除它。

\uuuu init\uuuuuu是一种特殊的方法,在创建类的新对象时总是调用它。只有当您想定义其他属性或以某种方式更改对象的行为时,才应该重载它。

\uuuu init\uuuuuuuuuu是一种特殊的方法,在创建类的新对象时总是调用它。只有当您想定义其他属性或以某种方式更改对象的行为时,才应该重载它。

可能重复@Martijn No,这不是关闭对话框中定义的可能重复。它没有涵盖完全相同的内容。你自己对这个问题的回答
stion,如果合并为链接问题的答案,将不会以任何令人满意的方式回答它,它只会看起来不合适,让读者感到困惑。@lazyr:那是因为我在重复投票后发现了我的答案中提到的评论。另一个问题当然回答了uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。以重复形式结束的问题必须是完全重复的。在结束语中,确切一词用了两次。在本例中,这个问题询问init_uuu和uuu init_uuu之间的区别,而链接的问题询问uuuu init_uuu和self做什么。因此,即使阅读链接的答案基本上可以回答这个问题,但根据定义,它们是完全相同的,而不是重复的。@lazyr:在实践中,你会发现“足够接近”是作为重复接近的理由。有时候,一个OP不太清楚他们在问什么,而另一个措辞更好的问题确实回答了实际问题。因此,作为复制品关闭是非常合适的。但是我们在这里偏离了主题,如果你想讨论重复结束哲学的相对优点,你应该把它改为。可能重复的@Martijn不,这不是一个可能的重复,正如关闭对话框中定义的那样。它没有涵盖完全相同的内容。你自己对这个问题的回答,如果合并为对链接问题的回答,将不会以任何令人满意的方式回答它,它只会看起来不合适,让读者感到困惑。@lazyr:那是因为我在重复投票后发现了我的回答中提到的评论。另一个问题当然回答了uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。以重复形式结束的问题必须是完全重复的。在结束语中,确切一词用了两次。在本例中,这个问题询问init_uuu和uuu init_uuu之间的区别,而链接的问题询问uuuu init_uuu和self做什么。因此,即使阅读链接的答案基本上可以回答这个问题,但根据定义,它们是完全相同的,而不是重复的。@lazyr:在实践中,你会发现“足够接近”是作为重复接近的理由。有时候,一个OP不太清楚他们在问什么,而另一个措辞更好的问题确实回答了实际问题。因此,作为复制品关闭是非常合适的。但我们在这里偏离了主题,如果你想讨论dupe结束哲学的相对优点,你应该把它改为。我理解,谢谢。最后一段解释了一切。我明白了,谢谢。最后一段解释了一切。