Как назначить атрибут счетчика внутри класса?

#python #class #attributes #subclass

Вопрос:

Это мой первый раз, когда я работаю с классами. Я пытаюсь понять, как я могу назначить счетчик в качестве атрибута как родительского, так и подклассов. Я не понимаю, как я могу считать элементы объекта. Я понимаю, как подсчитать # объектов/экземпляров этого конкретного класса.

Вот как я понимаю подсчет/перебор элементов с помощью цикла for

 # Parent Class
class Color:
    def __init__(self):
        self.name = 'Color'
        
# Inherent Classes
class Green(Color):
    def __init__(self):
        self.name = 'Green'
        
class Red(Color):
    def __init__(self):
        self.name = 'Red'

# Random Generator:
from random import choice
colorL = [choice(['Red', 'Green']) for randomI in range(20)]

cRed = cGreen = 0
for color in colorL:
 if color == 'Green':
   cGreen=cGreen 1
 else:
   cRed=cRed 1

# Print statements of random list, max count amp; specific count of inherent classes   
print(colorL)
print("Total # of colors:", len(colorL))
print("# of Greens:", cGreen)
print("# of Reds:", cRed)
 

Это моя попытка определить количество внутри класса, но родительская форма возвращает:

Общее количество цветов: <количество встроенных методов для объекта списка в 0x7fd13f4acf08>

и подклассы возвращают ошибку атрибута:

Ошибка атрибута: объект ‘int’ не имеет атрибута ‘count’

 # Parent Class
class Color:
    def __init__(self, name, count):
        count = 0
        self.name = 'Color'
        self.count  = 1
        
# Inherent Classes
class Green(Color):
    def __init__(self, name, count):
        count = 0
        self.name = 'Green'
        self.count  = 1
        
class Red(Color):
    def __init__(self, name, count):
        count = 0
        self.name = 'Red'
        self.count  = 1

# Random Generator:
from random import choice
colorL = [choice(['Red', 'Green']) for randomI in range(20)]

for color in colorL:
    if color == 'Green':
        GreenC = Green.count
    else:
        RedC = Red.count

# Print statements of random list, max count amp; specific count of inherent classes   
print(colorL)
print("Total # of colors:", colorL.count)
print("# of Greens:", GreenC.count)
print("# of Reds:", RedC.count)
 

Комментарии:

1. Ваш код сбивает с толку. Ни в одном из фрагментов вы не создаете никаких экземпляров классов, которые вы объявляете.

2. Пожалуйста, обновите свой вопрос с помощью вашего фактического кода. Если я попытаюсь запустить ваш второй фрагмент, я не получу ошибок, которые, как вы утверждаете, видите.

Ответ №1:

Это код, который вы на самом деле искали:

 # Base Class
class Color:
    count = 0
    def __init__(self, name):
        self.name = name
        Color.count  = 1
    def __repr__(self):
        return self.name

# Derived Classes
class Green(Color):
    count = 0
    def __init__(self):
        super().__init__('Green')
        Green.count  = 1
        
class Red(Color):
    count = 0
    def __init__(self):
        super().__init__('Red')
        Red.count  = 1

# Random Generator:
from random import choice
colorL = [choice([Red, Green])() for _ in range(20)]

# Print statements of random list, max count amp; specific count of derived classes
print(colorL)
print("Total # of colors:", Color.count)
print("# of Greens:", Green.count)
print("# of Reds:", Red.count)
 

Этот код создает экземпляры объявленных классов и заставляет их вести отдельный подсчет количества созданных, не производя подсчет самостоятельно.