2013-12-04 1 views
1

Я уже много лет программирую на Java, и моя школа здесь учит Python, и у меня с ним много проблем. Мой профессор попросил нас создать Connect4 в Python и начать с этих двух методов:Самостоятельный аргумент Python

def __init__(self, width, height): 
self.width = width 
self.height = height 
self.data = [] # this will be the board 

for row in range(self.height): 
    boardRow = [] 
    for col in range(self.width): 
     boardRow += [' '] 
    self.data += [boardRow] 

def __repr__(self): 
#print out rows & cols 
    s = '' # the string to return 
    for row in range(self.height): 
     s += '|' # add the spacer character 
     for col in range(self.width): 
      s += self.data[row][col] + '|' 
     s += '\n' 

    #print out separator 
    #your code here 

    # print out indices of each column 
    # using mod if greater than 9, 
    # for spacing issues 
    #your code here 

    return s # return it 

Я не понимаю self аргумент, я прочитал много об этом, и ничто, кажется, имеет смысл для меня. Я надеялся, что кто-то может дать мне небольшое объяснение того, что делает self в этой функции, и почему мой профессор говорит, что первая функция содержит только два аргумента, но есть четверо.

Любая помощь/объяснения были бы весьма признательны!

Here, где я получил эти функции.

+3

Вы посмотрели на это? http://stackoverflow.com/q/2709821/748858 – mgilson

+0

'self' является экземпляром вашего класса. Это неявно (или явно, в зависимости от вашей точки зрения) передается как первый аргумент для каждого метода. Это как «это» в java, но вы явно должны называть его первым аргументом для каждого метода. – roippi

+0

Я отредактировал ваш код (checkit, я надеюсь, что это правильно;), потому что он был неправильно отступом, а отступы с Python чрезвычайно важны;) – Giupo

ответ

1

при вызове метода на классе он проходит экземпляр класса в качестве первого аргумента метода, как правило, программисты называют этот аргумент сам, но он может быть назван любой

class CheckMeOut: 
    def class_func(self): 
     print self 

    def class_func1(s): 
     print s 

    def class_func2(xyz): 
     print xyz 

c = CheckMeOut() #create Instance 
c.class_func() 
c.class_func1() 
c.class_func2() 

или просто посмотреть на link mgilson поставлено