2015-07-17 1 views
-3

кода я в настоящее время, который не работаетПри назначении своих объектов к сетке, атрибуты не там

import pprint 

class Kile(object): 
    def __init__(self, name): 
     self.name = name 

     kilevalue = 1 

     def checkkilevalue(self): 
      print (self.kilevalue) 


kilecounter = 0 
krid = [] 
for row in range(4): 
    krid.append([]) 
    for colomn in range(4): 
     krid[row].append([]) 
     for level in range(3): 
      krid[row][colomn].append([]) 
      for tile in range(1): 
       krid[row][colomn][0].append(Kile(kilecounter)) 
       kilecounter += 1    

print(kilecounter) 
print(krid[0][0][0]) 
pprint.pprint(krid) 
print(krid[0][0][0].kilevalue) 

Это показывает сетку, она показывает объекты на [row][colomn][0] местах, но он не имеет атрибут .kilevalue

И теперь он работает иначе, но так, как он мне не нужен.

class Tile(object): 
    def __init__(self, name): 
     self.name = name 

     tilevalue = 0 

     def checktilevalue(self): 
      print (self.tilevalue) 

trid = [] 
ttilecounter = 0 
for row in range(3): 
    trid.append([]) 
    for colomn in range(3): 
     trid[row].append(Tile(ttilecounter)) 
     ttilecounter += 1 


print(ttilecounter) 
pprint.pprint(trid) 
print(dir(trid[0][0])) 

ответ

0

Я думаю, ваша ошибка в том, что вы назначаете kilevalue только в самой функции. Я думаю, вы хотите, чтобы класс kilevalue был назначен.

Чтобы сделать это, измените kilevalue = 1 на self.kilevalue = 1

EDIT: Я думаю, что Крид [строка] [колонные] [0] не всегда Нет, потому что вы не Настройка что-то к нему. Попробуйте добавить krid[row][colomn][0] = [] до того krid[row][colomn][0].append(Kile(kilecounter))

+0

Привет и спасибо за ваш ответ! Я изменил его, и это тот же результат. его показы как объекта, но не с атрибутом kilevalue – johnny2by4

+0

См. edit now, pls. – decontamin4t0R

+0

Привет и еще раз спасибо! Я сделал это, и он сделал работу. На самом деле у него есть объект во всех krid [row] [colomn] [0] местах, но не с атрибутами ... если я печатаю dir (krid [0] [0] [0]), он показывает что-то: ['__add__ ',' __class__ ',' __contains__ 'и т. д. и т. д. – johnny2by4

0

Ваш kile объект не имеет переменную с kilevalue экземпляра. В вашем методе __init__() вы просто создаете локальную переменную с именем kilevalue, а не переменной экземпляра.

Вам нужно назначить 1 для self.kilevalue в методе __init__() для kilevalue быть переменным экземпляр -

def __init__(self, name): 
     self.name = name 
     self.kilevalue = 1 
+0

Привет и спасибо за повтор. Вы не делаете разницы в результатах. Он работает для объекта Tile, но не для объекта Kile, хотя это точная копия eachother на моем компьютере. единственная разница - 1 раз вложенный список за 2 раза вложенный список. – johnny2by4

+0

не решает проблему с атрибутом 'kilevalue', который не найден. –

+0

HI и №. Единственная разница, которую я вижу, - это вложенная часть списка.Что я вижу, когда я проверяю dir (krid [0] [0] [0]) - это список, а не объект. поэтому его примерно 3 вложенного списка и добавление. я сообщу, если я найду решение – johnny2by4

0

В __init__ методы Kile, вы назначаете kilevalue = 1, но вы используете его в качестве свойства.

Думаю, вам нужно изменить это на self.kilevalue = 1, чтобы иметь возможность использовать его так, как вы хотите.

Примечание: вы также определяете метод checkkilevalue внутри метода __init__. Он не будет доступен нигде (при условии, что отступ правилен в вашем примере)

+0

Привет и спасибо за ваш ответ! Я изменил первую часть, и это стало вопросом. Отступ в примере действительно не правильный (острые глаза у вас есть). Отступ на моем компьютере является точной копией объекта Tile, который работает. но все равно, результаты одинаковы. – johnny2by4

0

поэтому после немного возиться и попробовать ответы и еще немного возиться, я нашел решение. Хотя я действительно не понимаю это.

class Kile(object): 
    def __init__(self, name): 
     self.name = name 

    kilevalue = 2 

    def checkkilevalue(self): 
     print (self.kilevalue) 

krid = [] 
kilecounter = 0 
for row in range(4): 
    krid.append([]) 
    for colomn in range(4): 
     krid[row].append([]) 
     for level in range(1): 
      krid[row][colomn].append(Kile(kilecounter)) 
      kilecounter += 1 
     for level in range(2): 
      krid[row][colomn].append([]) 

поэтому сначала я добавляю объект в 3-й список, а затем добавляю еще два пустых элемента списка в этот список. и это работает. В любом случае спасибо за поддержку :)