Ive боролся с заданием. Я вызываю метод str
, расположенный в подклассе Triangle из класса ShapeSet (я выделил соответствующие коды). Я не могу получить правильный вывод строки, когда я вызываю его таким образом (вызов его напрямую, печать (треугольник), работает отлично).Вызов __str__ в python
При вызове str
метода из класса ShapeSet:
<method-wrapper 'str' of list object at 0x011E13C8>
При вызове непосредственно:
>>>print(triangle):
Type:Triangle, base:3, height:4
Что я делаю неправильно?
class Shape(object):
def area(self):
raise AttributeException("Subclasses should override this method.")
class Triangle(Shape):
def __init__(self, base, height):
self.base=base
self.height=height
def area(self):
self.area=(self.base*self.height)/2
return self.area
def __str__(self):
return "Type:{}, base:{}, height:{}".format(self.__class__.__name__, self.base, self.height)
def __eq__(self, other):
return type(other)==Triangle and self.base==other.base and self.height==other.height
class ShapeSet:
def __init__(self):
self.shape_dict={}
def addShape(self, sh):
try:
self.shape_dict[type(sh)].append(sh)
except KeyError:
self.shape_dict[type(sh)]=[sh]
def __iter__(self):
return (self)
def __str__(self):
for value in self.shape_dict.values():
return "{}".format(value.__str__)
shape_set=ShapeSet()
triangle=Triangle(3,4)
shape_set.addShape(triangle)
print (triangle)
Не могли бы вы проанализировать это и обновить с помощью [mcve] исправляющий отступ и дать понять, какой вывод вы * получаете * и какой вывод вы хотите *. – jonrsharpe
'__str__' - это функция, а не сама строка, вы можете называть' __str __() ', но это волшебная функция, и это то, что вызывается, если вы вызываете' str (value) 'вместо этого, как правило, вы не вызываете напрямую '__str__' –
Этот цикл будет рассматривать только одно значение, потому что вы сразу же возвращаете его ...' для значения в self.shape_dict.values (): ' –