- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很确定我知道这个问题的答案,但想问问 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/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!