2015-06-24 2 views
1

Я пытаюсь изучить Python 2.7. Когда я запускаю этот код:Методы экземпляра Python и статические методы

class MyClass: 
    def PrintList1(*args): 
     for Count, Item in enumerate(args): 
      print("{0}. {1}".format(Count, Item)) 

    def PrintList2(**kwargs): 
     for Name, Value in kwargs.items(): 
      print("{0} likes {1}".format(Name, Value)) 

MyClass.PrintList1("Red", "Blue", "Green") 
MyClass.PrintList2(George="Red", Sue="Blue",Zarah="Green") 

я получаю TypeError:

MyClass.PrintList1("Red", "Blue", "Green") 
TypeError: unbound method PrintList1() must be called with MyClass instance as first argument (got str instance instead) 
>>> 

Почему?

+2

Почему лет u пытаюсь вызвать метод экземпляра в классе и где ваш параметр 'self'? Честно говоря, похоже, что эти методы вообще не относятся к классу. – jonrsharpe

ответ

1

MyClass - это класс.

PrintList1 - это метод.

Методы должны быть вызваны на инстанцируемые объекты класса.

Как это:

myObject = MyClass() 
myObject.PrintList1("Red", "Blue", "Green") 
myObject.PrintList2(George="Red", Sue="Blue", Zarah="Green") 

Для этого, чтобы работать должным образом, вы также должны сделать ваши методы взять self аргумент, как это:

class MyClass: 
    def PrintList1(self, *args): 
     for Count, Item in enumerate(args): 
      print("{0}. {1}".format(Count, Item)) 

    def PrintList2(self, **kwargs): 
     for Name, Value in kwargs.items(): 
      print("{0} likes {1}".format(Name, Value)) 

Если вы хотите, чтобы вызвать ваш код, статические функции, вы должны добавить декоратор staticmethod к вашему классу, например:

class MyClass: 
    @staticmethod 
    def PrintList1(*args): 
     for Count, Item in enumerate(args): 
      print("{0}. {1}".format(Count, Item)) 

    @staticmethod 
    def PrintList2(**kwargs): 
     for Name, Value in kwargs.items(): 
      print("{0} likes {1}".format(Name, Value)) 

MyClass.PrintList1("Red", "Blue", "Green") 
MyClass.PrintList2(George="Red", Sue="Blue",Zarah="Green") 
Смежные вопросы