Python:继承/重用类中的特定方法

2024-10-01 02:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个python类,它部分由其他类的特定方法组成,这些方法在“composited class”中对self进行操作。我该怎么做?在

例如,如果我想在我的新类“theClass”中包含来自classA和classB的特定方法:

    # Some classes to "inherit" from
    class classA(object):
        def methA1(self, value):
            self.attrib = value*1
        def methA2(self, value):
            self.attrib = value*2
    class classB(object):
        def methB1(self, value):
            self.attrib = value*3
        def methB2(self, value):
            self.attrib = value*4

    # The class I want to build
    class theClass(object):
        # WHAT TO DO HERE?
        # -------------------
        methA1 = classA.methA1
        methB2 = classB.methB2
        # -------------------
        # /WHAT TO DO HERE

        # add additional methods...
        def methC(self, value):
            self.attrib = value*5

    # I want the following behavior
    instance = theClass()
    instance.methB2(5)  # sets instance.attrib to 20
    instance.methA2(5)  # error, does not exist

Tags: to方法instanceselfobjectvaluedefclass
1条回答
网友
1楼 · 发布于 2024-10-01 02:23:13

您可以使用mixin:

class MixinA1(object):
    def methA1(self, value):
        self.attrib = value*1
class MixinB2(object):       
    def methB2(self, value):
        self.attrib = value*4
class classA(MixinA1):
    def methA2(self, value):
        self.attrib = value*2
class classB(MixinB2):
    def methB1(self, value):
        self.attrib = value*3

# The class I want to build
class theClass(MixinA1, MixinB2):
    def methC(self, value):
        self.attrib = value*5

如果Mixin类封装了一些您希望添加到多个类中的功能单元,Mixin就有意义了。在

如果方法不能自然地分解成功能单元, 还有另一种选择:

^{pr2}$

这与您已经发布的备选方案非常相似,只是它将所有类放在一个平等的基础上,最初方法与任何特定类都没有关联。这可能更可取,这样theClass不会通过从它不显式依赖的类(例如classA)获取并获取方法来“破坏封装”。在

相关问题 更多 >