Размещение объекта пользовательского класса в списке - PullRequest
0 голосов
/ 07 марта 2012

Я довольно новичок в объектно-ориентированном программировании, поэтому некоторые идеи абстракции для меня немного размыты.Я пишу переводчик для старого игрового языка.Частично это привело к необходимости реализации пользовательских типов из указанного языка и размещения их в стеке для манипулирования по мере необходимости.

Теперь я могу поместить строку в список.Я могу поместить число в список, и я даже нашел, что я могу поместить символы в список.Но я не совсем понимаю, как поместить экземпляр пользовательского объекта в список, когда не могу просто поместить его в переменную (поскольку, в конце концов, я не знаю, сколько их будет, и не могупродолжайте определять их вручную во время выполнения кода:)

Я создал класс для одного из самых простых типов данных - DBREF.DBREF просто содержит номер базы данных.Я не могу просто использовать целое число, строку, словарь и т. Д., Потому что в языке, который я должен реализовать, есть механизмы проверки типов, и это может сбить с толку, поскольку они уже используются в других местах в своих ближайших аналогах.

Вот мой код и мои соображения:

    class dbref:
        dbnumber=0
        def __init__(self, number):
            global number
            dbnumber=number
        def getdbref:
            global number
            return number

Я создаю класс с именем dbref.Все, что он делает (пока), это берет число и сохраняет его в переменной.Я надеюсь, что если бы я сделал:

    examplelist=[ dbref(5) ]

, что бы объект dbref был в стеке.Это возможно?Кроме того, смогу ли я сделать:

    if typeof(examplelist[0]) is dbref:
         print "It's a DBREF."
    else:
         print "Nope."

... или я неправильно понимаю, как работают классы Python?Кроме того, мое определение класса вонючий в любом случае?

1 Ответ

1 голос
/ 07 марта 2012

Если вы используете ...

class dbref:
    dbnumber=0

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

class dbref(object):

    def __init__(self, number):
        self.dbnumber = number

    def getdbref(self):
        return self.dbnumber

self - это ссылка на сам экземпляр объекта, который автоматически передается Python при вызове одного из методов экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...