gpt4 book ai didi

一行或直接引用属性的Python getter方法

转载 作者:行者123 更新时间:2023-12-01 08:41:22 25 4
gpt4 key购买 nike

假设我有一个 python 类,它可以在实例化时设置字典:

class myClass():
def __init__(self, some_dict=None):
self.some_dict = some_dict

然后在我的代码中的另一个地方,我想在该字典中查找一个键 - 但当然前提是它存在。那么最好的Python风格是1)在类中创建一个“检查方法”,即使它只有一行,还是2)直接引用类的字典属性?假设该类被实例化为 myClassInstance,则选项为

1)类方法:

    def is_key_in_dict(self, query_key):
return self.some_dict and query_key in self.some_dict

然后用作

if myClassInstance.is_key_in_dict(query_key):
do_something()

或者,2) 在使用它的代码中直接引用。

if myClassInstance.some_dict and query_key in myClassInstance.some_dict:
do_something()

直接引用类属性可以(风格方面)还是被认为是不好/不安全的做法?我对 @property 装饰器有些熟悉,如本文中所述:What's the pythonic way to use getters and setters? ,但不确定这是否回答了我的问题。

最佳答案

根据EAFP-Principle ,使用异常来控制流是Pythonic的。目前,您正在三思而后行。

我会编码(作为函数或方法):

def do_something(myClassInstance, query_key): # additional arguments omitted
try:
query_value = myClassInstance.some_dict[query_key]
except TypeError, KeyError: # could also consider AttributeError
pass # or whatever logic you need
else: # no exception
# code that does something

如果您有多个需要相同异常处理的函数/方法,为了可重用性,在异常处理周围编写一个额外的包装器是有意义的,如果没有发生异常并且有适当的哨兵,该包装器将返回 query_value如果发生异常,则返回值(例如 None)。

您也可以考虑使用该线路

self.some_dict = some_dict or {}

__init__中,那么你就不必再考虑TypeError了。

关于一行或直接引用属性的Python getter方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com