2015-04-19 4 views

ответ

4

Ну, вы могли бы украсить метод number.double с property:

class number: 
    def __init__(self, number): 
     self.number = number 
    @property 
    def double(self): 
     return self.number * 2 


print(number(42).double) # 84 

Если вы знаете тип вашей аргументации, было бы лучше, чтобы наследовать number от него. Например

class number(int): 
    @property 
    def double(self): 
     return type(self)(self * 2) 

print(number(42).double) # 84 
print(number(42).double.double) # 168 
+2

Не знаю, почему вы подклассифицируете int, когда они пытаются написать общий числовой класс. – L3viathan

+0

@ L3viathan fine – vaultah

+0

@ L3viathan 'number ('Слишком общий huh ? '). double' – vaultah

0

Здесь вы:

class Number(object): 

    def __init__(self, n): 
     self.n = n 

    def double(self): 
     return 2*self.n 

print(Number(44).double()) 

Несколько примечаний:

  1. Поскольку double() является методом класса Number (а не атрибута), вам нужно используйте круглые скобки для вызова.
  2. В Python считается стандартной практикой давать имена классов в верхнем регистре.
  3. Если вы хотите определить переменную экземпляра (в данном случае n или 44, вы должны def функцию __init__(), которая дает инструкции переводчика о том, как создать или инициализировать экземпляр вашего класса.

Надеюсь, это поможет, и удачи!

+0

Я делаю упражнение на кодовых знаках, и мне нужно использовать следующий синтаксис. Я не думаю, что могу использовать метод. Вот тестовый пример. test.assert_equals (PrimeFactorizer (24) .factor, {2: 3, 3: 1}) – Nohl

+0

Есть ли у вас код или документация для '' 'test.assert_equals()' ''. Я почти уверен, что '' 'test.assert_equals()' '' принимает фактическую функцию как аргумент (а не значение, возвращаемое вызовом функции), так что он может вызывать эту функцию. Если это так, то '' 'PrimeFactorizer.factor()' '' на самом деле является методом, даже если вы не используете круглые скобки при его использовании таким образом. – pzp

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