Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80

Как получить доступ к переменной, с тем же названием что и модуль?

19.08.2016, 18:45. Показов 1579. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как получить доступ из статического метода, (def i(st)) к переменной cards, которая является списком внутри цикла for? При вызове из статич. метода программа переменную cards принимает за модуль (он тоже назван точно так же, cards).
скрин фрагмента кода
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class BJ_Deck(cards.Deck):
    """ Колода для игры Blackjack. """
    def populate(self):
        for suit in BJ_Card.SUITS: 
            for rank in BJ_Card.RANKS: 
                self.cards.append(BJ_Card(rank, suit))
 
    @staticmethod
    def i(st):
        l = len(cards)
        print("l: ", (l))
        if l > st:
            return True
        else:
            return False
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2016, 18:45
Ответы с готовыми решениями:

Имя переменной как переменная. Как получить доступ к такой переменной?
Подскажите как получать данные из переменной, если ее имя вычисляется? И соответственно как потом возвращать в подобную переменную данные?...

Забыл, как объявить функцию с тем же названием?
Забыл, как объявить ещё одну функцию с тем же названием?

Как получить доступ к переменной?
Делаю игру(гонки),начал писать скрипт для спидометра Speedemeter(C#),почти закончил,но понял,что не могу получить доступ к переменной...

15
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 19:44
l = len(BJ_Deck.cards)

Ну, и в целом это какая-то дурацкая идея использовать поля класса, при этом делать метод статическим.
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 19:49  [ТС]
smlprog, ты наверное первую букву хотел l написать? Если да, то выдаёт ошибку: AttributeError: type object 'BJ_Deck' has no attribute 'cards'
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 19:52
Лучший ответ Сообщение было отмечено Franek как решение

Решение

Тогда метод статическим сделать без грязных хаков не получится.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BJ_Deck(cards.Deck):
    """ Колода для игры Blackjack. """
    def populate(self):
        for suit in BJ_Card.SUITS: 
            for rank in BJ_Card.RANKS: 
                self.cards.append(BJ_Card(rank, suit))
 
    def i(self, st):
        l = len(self.cards)
        print("l: ", (l))
        if l > st:
            return True
        else:
            return False
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 20:00  [ТС]
Если так делать, нужно создавать объект. Я не могу, т. к. при создании нового объекта автоматически исполняется метод _init_ обнуляющий переменную l (он находится в базовом классе, от которого образован BJ_Deck). Можно к методу i получить доступ без создания объекта?
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 20:06
А как ты тогда без объекта вызываешь populate?
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 20:25  [ТС]
smlprog, это создание объекта или нет?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class BJ_Game(object):
    """ A Blackjack Game. """
 
    def __init__(self, names):      
        self.players = []
        for name in names:
            player = BJ_Player(name)
            self.players.append(player)
 
        self.dealer = BJ_Dealer("Dealer")
        self.deck = BJ_Deck()
        self.deck.populate()
        self.deck.shuffle()]
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 20:28
Ты мне втираешь какую-то дичь. У populate первый аргумент - self, то есть инстанс класса, то есть объект, который ты как-то уже должен был создать.

Покажи, кто и как вызывает populate.
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 20:29  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class BJ_Game(object):
    """ A Blackjack Game. """
 
    def __init__(self, names):      
        self.players = []
        for name in names:
            player = BJ_Player(name)
            self.players.append(player)
 
        self.dealer = BJ_Dealer("Dealer")
        self.deck = BJ_Deck()
        self.deck.populate()
        self.deck.shuffle()
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 20:32
Python
1
self.deck = BJ_Deck()
Цитата Сообщение от Franek Посмотреть сообщение
smlprog, это создание объекта или нет?
Самое что ни на есть.
1
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 20:51  [ТС]
smlprog, всё работает, спасибо.
deck - это не имя объекта, я так понял, а параметр его. Зачем он нужен при создании объекта? Какую роль он играет?
Python
1
2
self.deck = BJ_Deck()
self.deck.populate()
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 20:57
deck - это поле инстанса класса BJ_Game. То есть объект - инстанс BJ_deck, который доступен по инстансу класса BJ_Game через поле deck.

То есть:

Python
1
2
game = BJ_Game("Petya", "smlprog", "Franek")
print game.deck.i(20)
У тебя нет проблем с конфликтами имён модуля и переменных, у тебя проблему с пониманием объектной модели Python.
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 21:16  [ТС]
Я не знал. С термином "поле" сталкиваюсь впервые.

Добавлено через 6 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BJ_Deck(cards.Deck):
    """ Колода для игры Blackjack. """
    def populate(self):
        for suit in BJ_Card.SUITS: 
            for rank in BJ_Card.RANKS: 
                self.cards.append(BJ_Card(rank, suit))
 
    def i(self, st):
        l = len(self.cards)
        print("l: ", (l))
        if l > st:
            return True
        else:
            return False
Подскажи ещё, пожалуйста, почему когда условие if l > st: является истинным появляется ошибка: list index out of range?
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 21:25
Полный трейс ошибки покажи.

Добавлено через 3 минуты
Цитата Сообщение от Franek Посмотреть сообщение
Я не знал. С термином "поле" сталкиваюсь впервые.
Это синоним "свойства" или "атрибута".
1
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
19.08.2016, 21:26  [ТС]
smlprog, Traceback (most recent call last):
File "C:/Users/Франек/Desktop/My_Python/BlackJack/blackjack.py", line 202, in <module>
main()
File "C:/Users/Франек/Desktop/My_Python/BlackJack/blackjack.py", line 198, in main
game.play()
File "C:/Users/Франек/Desktop/My_Python/BlackJack/blackjack.py", line 148, in play
self.dealer.flip_first_card() # hide dealer's first card
File "C:/Users/Франек/Desktop/My_Python/BlackJack/blackjack.py", line 104, in flip_first_card
first_card = self.cards[0]
IndexError: list index out of range
0
60 / 69 / 16
Регистрация: 18.04.2016
Сообщений: 213
19.08.2016, 21:29
Это означает, что метод flip_first_card() вызывается до того, как в cards добавили хотя бы один элемент.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2016, 21:29
Помогаю со студенческими работами здесь

Как получить доступ к переменной из kv?
Здравствуйте подскажите пж, я очень сильно начинающий))) до меня никак не доходит как сделать обычную кнопку с двумя функциями ? Ну и...

Как получить доступ к переменной?
Дано натуральное число n. Выяснить, сколько положительных элементов содержит матрица A размерности n*n, если: а) a=sin(i+j/2) б)...

Как получить доступ к переменной?
не могу получить значение переменной username

Как получить доступ к переменной класса?
есть класс формы с публичными перменными public ref class Form1 : public System::Windows::Forms::Form { public: String...

Как получить доступ к переменной из блока if
Столкнулся со странной проблемой, с которой нигде и никогда не сталкивался при других обстоятельствах. Суть в том, что есть метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru