@Alexander1705

Как унаследовать атрибуты базового класса в Python'е?

Имеется вот такой код:
class BaseImage:

    def __init__(self, width = 1920, height = 1080, bytespp = 3):
        self.__width = width
        self.__height = height
        self.__bytespp = bytespp
        self.__image = bytearray(self.__width * self.__height * self.__bytespp)


    def __getitem__(self, coordinate):
        shift = (coordinate[0] + self.__width * coordinate[1]) * self.__bytespp
        return self.__image[shift : shift + self.__bytespp]
    

    def __setitem__(self, coordinate, color):
        if len(color) != self.__bytespp:
            raise BadColorError
        shift= (coordinate[0] + self.__width * coordinate[1]) * self.__bytespp
        self.__image[shift : shift + self.__bytespp] = color


class TGAImage(BaseImage):

    def __init__(self, width = 1920, height = 1080, bytespp = 3):
        BaseImage(width, height, bytespp)


    def write(self, target):
        out = open(target, 'bw')
        header_area = (
            b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            + bytes([super.__width // 256, super().__width % 256]) 
            + bytes([super().__height // 256, super().__height % 256]) 
            + bytes([super().__bytespp << 3]) 
            + b'\x20')
        dev_area = b'\x00\x00\x00\x00'
        ext_area = b'\x00\x00\x00\x00'
        foot_area = b'TRUEVISION-XFILE.\0'
        out.write(header_area)
        out.write(super().__image)
        out.write(dev_area)
        out.write(ext_area)
        out.write(foot_area)
        out.close()

Выбивает ошибку, при вызове метода __setitem__ для объекта TGAImage.
>>> image = ImageIO.TGAImage()
>>> for x in range(1080):
...     image[x, x] = b'\xff\x00\x00'
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/home/alexander/Codding/Render/Render/ImageIO.py", line 25, in __setitem__
    if len(color) != self.__bytespp:
AttributeError: 'TGAImage' object has no attribute '_BaseImage__bytespp'

Насколько я понял, он не находит атрибут __bytespp объекта TGAImage.
Как его правильно унаследовать?
  • Вопрос задан
  • 2974 просмотра
Решения вопроса 1
yttrium
@yttrium
Если предполагается наследовать атрибуты, не следует их называть начиная с двойного подчеркивания, т.к. двойное подчеркивание запускает механизм name mangling
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы