2012-03-23 3 views
7

Я хотел бы иметь возможность добавить в пользовательский класс в стиле:Добавить в пользовательский класс в Python

x=myclass("Something", 7) 
x + 3 

7, конечно, соответствует внутренним свойством, что я хотел, чтобы увеличить добавив к нему.

Класс содержит число, которое относится к местоположению в списке. Это может показаться чем-то, что может быть сделано нормальным целым числом, но мне нужно, чтобы он выступал в качестве отдельного типа. Все это сделано для подражания старому игровому языку. Класс является его «переменным» классом, а значение переменной хранится в вышеупомянутом списке. По-видимому, в более старой версии игры массивы были подделаны путем выполнения математики на экземпляре объекта переменной, чтобы захватить другую переменную. Поэтому я пытаюсь подражать этому.

+0

Класс имеет номер, который ссылается на место в списке. Это может показаться чем-то, что может быть сделано нормальным целым числом, но мне нужно, чтобы он выступал в качестве отдельного типа. Все это сделано для подражания старому игровому языку. Класс является его «переменным» классом, а значение переменной хранится в вышеупомянутом списке. По-видимому, в более старой версии игры массивы были подделаны путем выполнения математики на экземпляре объекта переменной, чтобы захватить другую переменную. Поэтому я пытаюсь подражать этому @. @ – Kelketek

+0

Все еще не знаю, каковы требования, но из этого комментария кажется, что проще всего dervie от 'int'. –

+0

@Kelketek: Я переместил ваш комментарий в вопрос, в котором он находится. –

ответ

9

Если вы хотите поддержать дополнение для экземпляров класса, вам нужно определить __add__() метод вашего класса:

class MyClass(object): 
    def __init__(self, x): 
     self.x = x 
    def __add__(self, other): 
     return self.x + other 

Пример:

>>> a = MyClass(7) 
>>> a + 3 
10 

также поддерживают 3 + a, определяют метод __radd__() ,

Если вы хотите, чтобы иметь возможность обновить атрибут MyClass экземпляров x с помощью

a += 3 

вы можете определить __iadd__().

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

+0

Это работает. Мне не нужны все функции int. Например, я не хочу, чтобы radd работал для этого случая. Есть ли где-нибудь список функций, которые показывали бы мне, что я могу реализовать? Нужно ли просто добавлять методы из класса int в мой класс для тех, которые я хочу поддерживать? – Kelketek

+0

@Kelketek: Просто следуйте любым ссылкам в сообщении для дальнейших магических методов. Я не понимаю ваш второй вопрос. –

+1

Я люблю Python из-за таких функций. В Python вы можете многое сделать. – beary605

0

Что вы ищете, это перегрузка оператора. Вы можете сделать это в питона новых классов стилей, перегружая метод __add__ следующим образом:

>>> class Test(object): 
...  def __init__(self): self.prop = 3 
...  def __add__(self, x): 
...   return self.prop + x 
... 
>>> Test() + 4 
7 
>>> 
+0

Перечитывая то, что я написал, я, вероятно, не должен изменять свойство 'prop' при выполнении добавления. Упс. –

Смежные вопросы