1 / 1 / 0
Регистрация: 01.11.2018
Сообщений: 32
1

Атрибуты класса в ООП. Как сделать атрибут одним для всех экземпляров?

11.10.2019, 05:43. Показов 1395. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Возник вопрос как реализовать такой момент. Я пишу консольного дурака на ООП и немного не понимаю как сделать общим для всех экземпляров класса атрибут колоды карт, который будет принимать изминения с любого экземпляра класса.
Вот код, пока что я реализовую только суперкласс(колоду карт):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from random import randint
 
 
class CardDeck:
    """Imitating a card deck which has 36 cards, 4 lear and 9 cards for each lear"""
 
    deck = {'0': ['6-Peak', '7-Peak', '8-Peak', '9-Peak', '10-Peak', 'B-Peak', 'D-Peak', 'K-Peak', 'T-Peak'],
            '1': ['6-Red', '7-Red', '8-Red', '9-Red', '10-Red', 'B-Red', 'D-Red', 'K-Red', 'T-Red'],
            '2': ['6-Bub', '7-Bub', '8-Bub', '9-Bub', '10-Bub', 'B-Bub', 'D-Bub', 'K-Bub', 'T-Bub'],
            '3': ['6-Cross', '7-Cross', '8-Cross', '9-Cross', '10-Cross', 'B-Cross', 'D-Cross', 'K-Cross', 'T-Cross']
            }
 
    lear = None
    TrumpCard = None
 
    def getTrumpCard(self):
        """Getting a random TrumpCard"""
        self.lear = randint(0, (len(self.deck) - 1))
        self.TrumpCard = self.deck[str(self.lear)][randint(0, (len(self.deck[str(self.lear)]) - 1))]
 
        print(self.TrumpCard)
 
 
# single test of our classes
if __name__ == '__main__':
    player = CardDeck()
    player.getTrumpCard()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2019, 05:43
Ответы с готовыми решениями:

Сигналы для всех экземпляров класса
Всем привет, интересует вопрос, позволяет ли qt создать сигнал который будет слышен для всех...

Создать метод addRecord для всех экземпляров класса BoardOfFame
По умолчанию мест на доске славы будет всего 3. Но в случае международных турниров, где чемпионских...

Массив в классе инициализируется только 1 раз для всех экземпляров класса
Вопрос решен. Здравствуйте! Создается класс, в классе есть массив, который используется...

Как сделать чтобы атрибут класса не менялся
t = self.form for i, word in enumerate(self.form): if '+' in word: ...

5
Автоматизируй это!
Эксперт Python
7186 / 4678 / 1220
Регистрация: 30.03.2015
Сообщений: 13,350
Записей в блоге: 29
11.10.2019, 06:03 2
Цитата Сообщение от UsingOpp Посмотреть сообщение
deck = {'0': ['6-Peak', '7-Peak', '8-Peak', '9-Peak', '10-Peak', 'B-Peak', 'D-Peak', 'K-Peak', 'T-Peak'],
'1': ['6-Red', '7-Red', '8-Red
достаточно одной последовательности значений и последовательности мастей, чтобы автоматом сформировать колоду. Если бы 52 карты было, ты бы тоже вот так ручками прописывал?

Цитата Сообщение от UsingOpp Посмотреть сообщение
как сделать общим для всех экземпляров класса атрибут
атрибут на уровне класса (без self)

Цитата Сообщение от UsingOpp Посмотреть сообщение
который будет принимать изминения с любого экземпляра класса.
все как раз этого избегают обычно. Какие изменения ожидаются, разве карта или игрок управляют колодой? Или ты о чем? расскажи подробнее о схеме изменения объектами атрибута своего класса.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.10.2019, 06:09 3
UsingOpp, код — в теги.

1. Создать объект колоды.
2. Создать объект игрока. В конструктор передать колоду, сохранить ссылку у игрока.

Цитата Сообщение от UsingOpp Посмотреть сообщение
player = CardDeck()
Игрок — это колода?
0
1 / 1 / 0
Регистрация: 01.11.2018
Сообщений: 32
11.10.2019, 06:14  [ТС] 4
У меня есть атрибут класса, это колода, насчёт её реализации ещё буду и изминять. Просто в моем пониманиикаждый новый экземлар будет иметь эту самую колоду, при любом методе для монипуляции над ней она будет изминятся в каждом экземляре класса, но эти изминения не будут влиять на другой экземпляр
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.10.2019, 06:17 5
Цитата Сообщение от UsingOpp Посмотреть сообщение
Просто в моем пониманиикаждый новый экземлар будет иметь эту самую колоду, при любом методе для монипуляции над ней она будет изминятся в каждом экземляре класса, но эти изминения не будут влиять на другой экземпляр
Только если каждый игрок создает свой экземпляр колоды.
Я говорил о том, что колода создается одна, а затем ссылка на нее передается в конструкторы игроков.
0
Модератор
Эксперт Python
2691 / 1597 / 513
Регистрация: 21.02.2017
Сообщений: 4,211
Записей в блоге: 1
11.10.2019, 08:28 6
UsingOpp, я уже описывал реализации класса с колодой, определения методов сравнения, поищи по форуму.

Ответ на вопрос:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*- coding: utf-8 -*-
 
class Card:
 
    __currentTramp = "clubs"
 
    def __init__(self, price:int, suit:str):
        self.price, self.suit = price, suit
 
    @classmethod
    def setCurrentTramp(self, suit:str):
        self.__currentTramp = suit
 
    @classmethod
    def currentTrump(self)->str:
        return self.__currentTramp
 
    def isTrump(self)->bool:
        return self.suit == self.__currentTramp
 
#example:
card1 = Card(1, "clubs")
card2 = Card(2, "diamonds")
 
print(card1.isTrump(), card2.isTrump()) # True False
Card.setCurrentTramp("diamonds")
print(card1.isTrump(), card2.isTrump()) # False True
0
11.10.2019, 08:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2019, 08:28
Помогаю со студенческими работами здесь

Как сделать так, чтобы значения экземпляров класса не повторялись
Я пытаюсь написать игру 2048. Коротко об игре, для тех кто не знает: Есть поле 4х4 в нем...

Перебор всех экземпляров класса
Ребятушки, подскажите как да что. Как "найти" все экземпляры класса "X"? Допустим есть у меня...

Вызов метода из всех экземпляров класса
Итак, ситуация. Мне позарез необходимо вызвать методы для каждого экземпляра класса по отдельности,...

Компиляция и атрибуты: как создать атрибут наподобие DllImport
Атрибуты Net Framework известным образом влияют на компиляцию. Например: DllImport,Extension ... и...

Как создать массив экземпляров класса для последующего обращения к его элементам по ссылке?
Всем здравствуйте. Вот код моего класса: class Param { private: int cnt; float akk;...

Как задать атрибут для генерируемого класса, используя Reflection.Emit?
Я пишу код, который должен сгенерировать следующий класс в рантайме, используя...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru