In Python can one implement mixin behavior without using inheritance?

前端 未结 8 1488
醉梦人生
醉梦人生 2021-02-06 13:10

Is there a reasonable way in Python to implement mixin behavior similar to that found in Ruby -- that is, without using inheritance?

class Mixin(object):
    def         


        
8条回答
  •  灰色年华
    2021-02-06 13:38

    Composition? It seems like that would be the simplest way to handle this: either wrap your object in a decorator or just import the methods as an object into your class definition itself. This is what I usually do: put the methods that I want to share between classes in a file and then import the file. If I want to override some behavior I import a modified file with the same method names as the same object name. It's a little sloppy, but it works.

    For example, if I want the init_covers behavior from this file (bedg.py)

    import cove as cov
    
    
    def init_covers(n):
        n.covers.append(cov.Cover((set([n.id]))))
        id_list = []
        for a in n.neighbors:
            id_list.append(a.id)
        n.covers.append(cov.Cover((set(id_list))))
    
    def update_degree(n):
        for a in n.covers:
            a.degree = 0
            for b in n.covers:
                if  a != b:
                    a.degree += len(a.node_list.intersection(b.node_list))    
    

    In my bar class file I would do: import bedg as foo

    and then if I want to change my foo behaviors in another class that inherited bar, I write

    import bild as foo

    Like I say, it is sloppy.

提交回复
热议问题