Можно ли преобразовать методы класса dunder по умолчанию в методы класса? - PullRequest
1 голос
/ 27 мая 2020

Чтобы дать вам некоторый контекст, вчера я наткнулся на этот пост . Я нашел проблему довольно интересной, поэтому я попытался найти решение, которое сохраняло бы синтаксис как можно ближе к тому, о чем просили. Вот что я придумал:

class DummyCube:
    cubes = []

    @classmethod
    def __getattribute__(cls, name):
        print('is this called?')
        attributes = [getattr(cube, name) for cube in cls.cubes]

        return attributes


class Cube:
    def __init__(self, volume):
        DummyCube.cubes.append(self)
        self.volume = volume


a = Cube(1)
b = Cube(2)
c = Cube(3)

print(DummyCube.__getattribute__('volume'))
print(DummyCube.volume)

Я думаю, что мой подход слишком сложен (или просто в целом не очень хорош), особенно по сравнению с принятым в настоящее время ответом, но, к счастью, это не очень актуально для что я хотел бы знать.

Мой подход не работает, потому что DummyCube.volume вызывает AttributeError: type object 'DummyCube' has no attribute 'volume', что, конечно, верно, но я не понимаю, почему мой собственный метод класса __getattribute__ не вызывается . Вызов метода работает напрямую. Неужели это вообще невозможно? Что мне здесь не хватает? Насколько я понимаю, __getattribute__ - это то, что вызывается первым при использовании нотации '.', Но отслеживание ошибок не позволяет мне это подтвердить.

...