Документация pandas не рекомендует подклассы их структур данных. Одна из рекомендуемых ими альтернатив — использование композиции, но они просто указывают читателям на статью в Википедии о композиции и наследовании. Эта статья и другие ресурсы, которые я нашел, не помогли мне понять, как расширить pandas
DataFrame
с помощью композиции. Может ли кто-нибудь объяснить композицию в этом контексте и рассказать мне о случаях, когда композиция может быть предпочтительной альтернативой подклассу pd.DataFrame
? Простой пример или ссылка на информацию, более поучительную, чем статьи в Википедии, были бы очень полезны.
В этом вопросе я специально спрашиваю, как следует использовать композицию в случаях, когда у кого-то может возникнуть соблазн создать подкласс pd.DataFrame
. Я понимаю, что есть другие решения для расширения объекта Python, не связанные с композицией, и я спросил еще один вопрос о расширении pandas
DataFrames
, которое привело к другому решению с использованием класса-оболочки.
Я не понял, что упаковка и композиция здесь относятся к одному и тому же подходу, как указано в ответе Макса Ярмолинского ниже. ответ на вопрос, на который я ссылался выше, содержит более полное обсуждение использования композиции в этом случае, что может потребовать обработки __getattr__
, __getitem__
и __setitem__
правильно (я понимаю, что это очевидно для людей, которые знают, что они делают, но мне пришлось задать свой предыдущий вопрос, потому что я не смог получить/установить элементы, когда пытался самостоятельно).