2015-02-17 4 views
5

Um meinen Code zu vereinfachen, möchte ich ein Set implementieren, das alles enthält. Ich denke, dass der einfachste Weg, um dies zu umgehen, eine benutzerdefinierte Menge ist, die True für jede Abfrage zurückgibt. In meinem Fall bin ich vor allem Interesse an den schneiden von Sätzen, so dass die folgenden Kriterien erfüllt sind:Implementieren des All/Universal-Sets

myset = MySet() 
myset & {1, 2, 3} == {1, 2, 3} # (1) 
{1, 2, 3} & myset == {1, 2, 3} # (2) 

Ich habe set auf folgende Weise unterklassiert:

class MySet(set): 
    def __and__(self, other): 
     return other 

Dies funktioniert für (1), aber (2) schlägt immer noch fehl. Gibt es eine ähnlich einfache Möglichkeit, zu arbeiten?

+0

es heißt ein Universal-Set übrigens –

+1

Schön, wusste das nicht. Hier ist ein Link zu anderen Methoden, die man überschreiben kann, um ähnliche Funktionen zu anderen Set-Operationen hinzuzufügen: http://fiber-space.de/wordpress/2009/04/16/universal-set-in-python/ – imolit

Antwort

6

Sie müssen auch die umgekehrte Version des und -Operators (__rand__) definieren, damit Ihre Unterklassen-Methoden aufgerufen werden, wenn es das zweite Argument sowie das erste ist.

class MySet(set): 
    def __and__(self, other): 
     return other 

    def __rand__(self, other): 
     return other 
+3

I don Ich denke, das sollten Klassenmethoden sein. Es funktioniert einfach, weil "self" ungenutzt ist. – interjay

+0

Das funktioniert perfekt. @interjay, wahr, es scheint, dass es nicht benötigt wird. – imolit

Verwandte Themen