Ecco il mio codice:Cosa fa __contains__ fare, ciò che può chiamare __contains__ funzione
class a(object):
d='ddd'
def __contains__(self):
if self.d:return True
b=a()
print b.contains('d') # error
print contains(b,'d') # error
Ecco il mio codice:Cosa fa __contains__ fare, ciò che può chiamare __contains__ funzione
class a(object):
d='ddd'
def __contains__(self):
if self.d:return True
b=a()
print b.contains('d') # error
print contains(b,'d') # error
Come tutti i metodi speciali (con "nomi magici" che iniziano e finiscono in __
), __contains__
è non destinate ad essere chiamato direttamente (se non in casi molto specifici, come fino = chiamate alla superclasse): piuttosto tali metodi sono chiamati come parte dell'operazione di built-in e operatori. Nel caso di __contains__
, l'operatore in questione è in
- l'operatore "controllo di contenimento".
con la classe a
come lo si presenti (tranne che per fissare il vostro errore di battitura, e l'utilizzo di True
invece di true
-!), E b
come il suo esempio, print 'x' in b
stamperà True
- e così sarà ogni altro controllo di contenimento su b
, dal b
restituisce sempre True
(perché self.d
, una stringa non vuota, è vero).
per ottenere il codice di fare qualcosa (anche se nulla di utile):
class a(object):
d='ddd'
def __contains__(self, m):
if self.d: return True
b=a()
>>> 'd' in b
True
Il docs.
if self.d:return true
self.d
è la stringa 'ddd'
. Le stringhe non vuote sono sempre veritiere: quando si utilizza if
su 'ddd'
, si comporterà sempre come se avessi detto if True:
.
Penso che quello che probabilmente è dire:
def __contains__(self, item):
return item in self.d
in
è l'operatore che chiama il metodo __contains__
dietro le quinte.
contiene il metodo definisce come si comportano le classi di classe quando appaiono al lato destro di in e non in operatore.
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __contains__(self,param1):
return True if param1 in self.__dict__.keys() else False
>>> p = Person('Robby Krieger',23)
>>> 'name' in p
True
Vediamo un esempio molto semplice di metodo magico __contains__:
Supponiamo che io sono di classe Player e il mio metodo __init__ prende un argomento stringa nome. Nel main ho creato un oggetto (obj1) di classe Player.
Ora, se voglio sapere se il mio obj1 (in questo caso attributo name del obj1) contiene una particolare stringa, sottostringa o di un alfabeto, devo implementare __contains__ metodo, come mostrato nell'esempio.
Se la mia classe ha __contains__ metodo posso chiamare di operatore incorporato in sui miei oggetti personalizzati come mostrato nell'esempio.
class Player():
def __init__(self, name):
self.name=name
def __contains__(self, substring):
if substring in self.name:
return True
else:
return False
obj1=Player("Sam")
print ('am' in obj1) ----> True
print ('ami' in obj1) ----> False