栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

基本方法链接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基本方法链接

方法链接只是能够添加

.second_func()
任何
.first_func()
返回值。通过确保所有可链接的方法返回,可以很容易地实现它
self
。(请注意,这与无关
__call()__
)。

class foo():    def __init__(self, kind=None):        self.kind = kind    def my_print(self):        print (self.kind)        return self    def line(self):        self.kind = 'line'        return self    def bar(self):        self.kind='bar'        return self

您可以

foo
通过忽略对象的返回值以非链接方式使用它们:

a = foo()a.line()a.my_print()a.bar()a.my_print()assert a.kind == 'bar'

或者,由于每个函数现在都返回对象本身,因此您可以直接对返回的值进行操作。您可以通过以下等效代码使用方法链接:

b = foo()b.line().my_print().bar().my_print()assert b.kind == 'bar'

甚至:

c = foo().line().my_print().bar().my_print()assert c.kind == 'bar'

摆脱

()
调用语法的问题是与方法链接 完全不同的概念
。如果要使用链属性,并且使这些属性改变其对象,请使用
@property
装饰器。(但是,通过属性更改对象似乎很危险。最好使用方法并用动词命名:例如,
.set_line()
而不是
.line
。)

class foo():    def __init__(self, kind=None):        self.kind = kind    def my_print(self):        print (self.kind)        return self    @property    def line(self):        self.kind = 'line'        return self    @property    def bar(self):        self.kind='bar'        return selfa = foo()a.linea.my_print()a.bara.my_print()assert a.kind == 'bar'b = foo()b.line.my_print().bar.my_print()assert b.kind == 'bar'c = foo().line.my_print().bar.my_print()assert c.kind == 'bar'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/640977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号