#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)
Этот код создает экземпляры объявленных классов и заставляет их вести отдельный подсчет количества созданных, не производя подсчет самостоятельно.