Есть ли у Python свойства? - PullRequest
3 голосов
/ 02 мая 2009

Так что-то вроде:

vector3.Length

на самом деле это вызов функции, который вычисляет длину вектора, а не переменную.

Ответы [ 5 ]

14 голосов
/ 02 мая 2009

С классами нового стиля вы можете использовать property(): http://www.python.org/download/releases/2.2.3/descrintro/#property.

6 голосов
/ 02 мая 2009
5 голосов
/ 02 мая 2009

Если ваша переменная 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 голосов
/ 02 мая 2009

До прихода декоратора property () идиома использовала метод без параметров для вычисляемых свойств. Эта идиома по-прежнему часто используется в качестве предпочтения декоратору, хотя это может быть для согласованности в библиотеке, которая началась до классов нового стиля.

0 голосов
/ 03 мая 2009

вы можете переопределить некоторые специальные методы, чтобы изменить доступ к атрибутам, см. документацию по питону здесь или здесь

И то и другое замедлит любой доступ к атрибутам вашего класса, поэтому, в общем, лучше всего использовать свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...