gpt4 book ai didi

python - Python 的良好实践 : Cutting variable names as parameters

转载 作者:太空狗 更新时间:2023-10-30 01:09:02 24 4
gpt4 key购买 nike

我很确定我知道这个问题的答案,但想问问 python 社区。

我正在开发一个 python 项目,当前的趋势是削减变量名或类名以将其作为其他方法中的参数传递...例如:

myVar.__classname__[6:] 

或最差:

try :
...
except Error as err :
myVar = err.message.split(':')[0]
getattr(myInst, myVar)

等等...就是说,我们必须遵守一个非常严格的命名约定,该约定将适合所有那些可怕的代码行,但我想知道这是否是一种常见的做法,我是否完全不符合行规或如果我说这只是……糟糕的话是对的。

这对我来说似乎是一个非常糟糕的主意,但因为我们别无选择......

感谢任何对我有帮助的回复

编辑:如果您想了解更多详细信息,这是 try/except 中的实际代码:

except ValueError as err:
field_error = self.klass.__name__ + '_' + err.message.split(':')[0]
getattr(self.ui, field_error).setText(err.message)

编辑:所以有些人要求提供更多详细信息:

在上面的示例中,我们想在用户输入的值错误时在字段中设置错误消息。

self.klass代表一个SQL Alchemy类,“命名规范”说每个字段都应该以SQL Alchemy类名开头,然后是下划线,然后是我们设置错误信息的字段(当前与用户输入错误相同)。

这将“构造”(天哪……这感觉太糟糕了)错误的 ui 字段的名称,然后我们将在通用 ui 上使用 getattr 获取它。

这感觉很不对,因为它基于一个命名约定,当我们开始有更多的类时可能会有数十亿个异常......实际上,我不介意解决这个问题,但整个项目都是基于这个命名约定。第一个示例基于我们的应用程序有不同的 ui 文件这一事实,并且这些文件由代码(如 7CDGR01 )索引。然后由一个类完成这些以添加行为(信号处理...等)。如果我保留相同的示例,则该类被命名为:Screen7CDGR01。因此,要获得屏幕代码,您需要从第 6 个字符开始获取类名的末尾...然后将其发送到另一个方法等...

认为你们都明白了,这不是我投票的,我认为这很糟糕,我不是 python 专家,但我认为即使 python 允许我们做很多事情,也不应该像那样使用。

最佳答案

对变量/类名使用内省(introspection)是危险的,因为在 Python 中,名称不一致:Python introspection: access function name and docstring inside function definition

#!/usr/local/bin/python2.7


class myInst():
iitt = 15
pass

class deco():
def __init__(self, id, *args, **kws):
self.__id = id
self.iitt = 25
self.__name__ = "another name"

@deco
class myInst2():
iitt = 15
pass


# Overriding class name
print "MyInst name :", myInst.__name__ #"myInst"
print "MyInst2 name :", myInst2.__name__ #"another name"


# Overriding attribute value
try:
raise ValueError("iitt: Error!")
except ValueError as err:
myVar = err.message.split(':')[0]
l = getattr(myInst, myVar)
print l # 15

try:
raise ValueError("iitt: Error!")
except ValueError as err :
myVar = err.message.split(':')[0]
l = getattr(myInst2, myVar)
print l # 25

#Duck Typing
myInst = myInst2
try:
raise ValueError("iitt: Error!")
except ValueError as err :
myVar = err.message.split(':')[0]
l = getattr(myInst, myVar)
print l # 25

关于python - Python 的良好实践 : Cutting variable names as parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17315429/

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