[英]Chaining instance methods in python
我想在python中使用方法和子方法创建一个类。
我想做的例子:
foo = Foo()
foo.playlist('my playlist').add('i_add_a_track_in_"my playlist".ogg')
foo.playlist('my playlist').delete('i_remove_this_track.ogg')
我现在有这段代码:
class Foo(object):
def playlist(self, name):
pass #my function...
def add(self, track):
pass #adding track
def delete(self, track):
pass #delete track
请帮助我,我不知道该怎么办。
谢谢
IIUC,您要一个接一个地链接方法调用吗? 您要做的就是在每个函数的末尾返回self
。
class Foo(object):
...
def playlist(self, name):
...
return self
... # and so on
MVCE:
In [229]: class Foo:
...: def __init__(self, data):
...: self.data = data
...:
...: def add(self, val):
...: self.data += val
...: return self
...:
...: def sub(self, val):
...: self.data -= val
...: return self
...:
In [231]: x = Foo(0)
In [232]: x = x.add(10).sub(5) # or just x.add(10).sub(5)
In [233]: x.data
Out[233]: 5
如果我理解正确, foo.playlist('someplaylist').do_something()
实际上应该是
playlist = foo('someplaylist')
playlist.do_something()
其中playlist
不是foo
对象(即foo.do_something()
不应有任何意义,而应该引发错误),而是不同类的实例。
如果确实如此,那么您实际上需要两个类:具有返回Playlist
对象的playlist(...)
方法的Foo
和具有add()
和delete()
方法的Playlist
:
class Playlist(object):
def __init__(self, name):
self.name = name
def add(self, what):
print("adding {} to playlist {}".format(what, self.name))
def delete(self, what):
print("deleting {} from playlist {}".format(what, self.name))
class Foo(object):
def playlist(self, name):
return Playlist(name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.