Python有属性吗?

时间:2009-05-01 20:32:08

标签: python

类似于:

vector3.Length

实际上是一个函数调用,它计算向量的长度,而不是变量。

5 个答案:

答案 0 :(得分:14)

使用新式课程,您可以使用property()http://www.python.org/download/releases/2.2.3/descrintro/#property

答案 1 :(得分:6)

答案 2 :(得分:5)

如果您的变量 vector3 是一个点与原点的三维定向距离,并且您需要它的长度,请使用以下内容:

import math
vector3 = [5, 6, -7]
print math.sqrt(vector3[0]**2 + vector3[1]**2 + vector3[2]**2)

如果您需要适用于任意维度的解决方案,请执行以下操作:

import math
vector3 = [5, 6, -7]
print math.sqrt(sum(c ** 2 for c in vector3))

您可以使用Length属性定义自己的矢量类,如下所示:

import math
class Vector3(object):
  def __init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z
  @property
  def Length(self):
    return math.sqrt(self.x ** 2 + self.y ** 2 + self.z ** 2)
vector3 = Vector3(5, 6, -7)
print vector3.Length

答案 3 :(得分:3)

在property()装饰器进来之前,这个习惯用法是对计算属性使用无参数方法。这个成语仍然经常被优先用于装饰器,尽管这可能是为了在新式类之前开始的库中的一致性。

答案 4 :(得分:0)

您可以覆盖一些特殊方法来更改属性的访问方式, 请参阅python文档herehere

这两种方法都会降低对您的类的任何属性访问速度,因此通常使用属性可能是最好的。