【发布时间】:2014-07-04 14:56:54
【问题描述】:
哪种编码方式更好?
以下示例(用python编写):
class sampleClass:
def __init__( self, filter ): #filter is a string
self.indexed = False #no
filterTokens = filter.split()
if ( filterTokens[0].isdigit ):
self.indexed = True #yes
else:
return
self.action = filterTokens[1]
self.protocol = filterTokens[2]
self.validity = True #valid
if ( self.protocol == 'ip' )
#something
elif ( self.protocol == 'tcp' )
#someOtherThing
else:
self.validity = False #Invalid
现在,如果 filter 中的第一个 token 不是数字,则该类的对象将只有一个属性 - indexed。
上面的类可能有数百个属性。在这种情况下,这是一种更好的编码实践 -
为所有对象具有相同数量的属性。 (即在构造函数的顶部定义所有属性,给它们一些默认值或其他)
或者
另一种方式(如上面的示例)
例如。
filter = '10 permit ip 10.10.10.0/28 20.20.20.0/28'
obj = sampleClass(filter)
【问题讨论】:
-
你为什么使用
0和1而不是True和False?整个filter只是布尔属性的一系列标志吗?你有所有属性的默认值吗?是否有一些依赖于他人?您什么时候访问这些属性? -
@jonrsharpe 过滤器是一个信息字符串。基于哪些属性被初始化。并非所有属性都相互依赖。如果我没有所有属性的默认值,它们可以只是 "n/a" 或类似的东西。
-
您能否提供几个稍微不那么简单的
filter示例以及应该如何处理? -
你为什么要做那个初始化。只需存储过滤器字符串。为什么它还是一个字符串?
-
@TonyHopkinson 因为 filter 中的信息是以后使用的,不是字符串,而是分段。我不在乎字符串是否没有被索引,它只会在字符串被索引时困扰我。按原样存储字符串将导致以后的操作复杂化。我寻求关于更可取的编码风格的意见。
标签: python class coding-style