-1

我现在一直在使用继承,我发现自己在类的构造函数部分编写了大部分代码,并且我已经到了存在如此多的属性以至于对它们进行分类要容易得多的地步,我做到了它通过声明一个空的对象类并在主类中创建一个属性,该属性将对象类作为数据类别返回:

import somemodule as sm


class Background(object):
    def __init__(self):
        pass


class Border(object):
    def __init__(self):
        pass


class Main(sm.SomeClass):
    def __init__(self, item):
        super().__init__(self)

        self.item = item

        # some more attribute from the parent class
        # starts getting messy

        self.bd.width = 10
        self.bd.color = 'blue'
                                    # looks cleaner than self.bg_color
        self.bg.accent = 'yellow'
        self.bg.color = 'green'
        

    @property
    def bg(self)
        return Background

    @bg.getter
    def bg(self)
        return Background

    @property
    def bd(self)
        return Border

    @bd.getter
    def bd(self)
        return Border


ins = Main('app')

我刚刚习惯了类,我还不太了解如何使用@decorators。

我的问题是它是否以任何方式“pythonic”,或者甚至完全不正确,正确的方式是什么?

4

1 回答 1

0

我认为您正在寻找的是使用类composition

在 OOP 中查看inheritancevscomposition

继承建模IS A关系,组合建模HAS A关系

IE

class Border: # omit
class Background # omit

# main HAS A Background and Border and IS A sm.SomeClass
class Main(sm.SomeClass):
    Background bg
    Border bd
  

阅读这篇文章:https ://realpython.com/inheritance-composition-python/

此外,在 python 3 中,我认为您不需要从object类扩展/继承。

于 2021-10-16T20:01:19.090 回答