2017-12-02 224 views
0

我正在学习Python和一般编程真的,我很好奇,从一个更哲学的角度东西。具体来说,我想知道在一个类中的单个方法是完全模块化的还是相互依赖的。使方法模块化或依赖/链接有意义吗?

例如,在我当前的用例中,我以相关的方式使用我的类中的所有方法,即将来自一个方法的输出或返回值用作下一个方法中的参数。尽管在这种情况下,在下一个方法中直接调用该方法的值肯定会更容易,但我仍然使用泛型参数并以模块化方式对其进行编码,然后在运行该脚本时,我列出了一个较长的依赖关系链为了调用它。我会举一个例子,因为我不确定我说的是否合理,但我想让你们的人对此有所意见。谢谢!!

的类中的方法2

模块化例如:

def get_token(self, values, url): 
    self.values = values 
    self.url = url 
    tls_version = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 
    data = urllib.parse.urlencode(self.values).encode("utf-8") 
    req = urllib.request.Request(self.url, data) 
    res = urllib.request.urlopen(req, context=tls_version).read() 
    response_js = json.loads(res) 
    return response_js 

def parse(self, json_block): 
    self.json_block = json_block 
    token = self.json_block['access_token'] 
    inst_url = self.json_block['instance_url'] 
    return token, inst_url 

当我打电话这一点,则是一个长长的名单(即):

self.parse(get_token(values, url)) ... and this goes on as there are several other methods 

当涉及到依赖的例子......它本质上看起来很相似,但不是允许指定参数,而是使用从函数中的get_token()检索的数据。这将允许更短的方法,也更容易打电话,但我担心这是错误的方式去做,因为它不允许多功能性。

对此事的任何意见,非常感谢!

回答

0

我个人认为(因为这是这是什么),最有用的方式做到这一点是让他们都相互分开,但有它计算它们放在一起的功能。

看到代码:

class Foo: 
    def method1(self, var1, var2): 
     # do things 
     return var3, var4 

    def method2(self, var1, var2): 
     # do things 
     return var3 

    def method3(self, var1): 
     # do things 
     return var3, var4, var5 

    def method4(self, var1, var2, var3): 
     # do things 
     return var3 

    def calculate_meaning_of_life(self, var1, var2): 
     inter_var1, inter_var2 = method1(var1, var2) 

     inter_var3 = method2(inter_var1, inter_var2) 

     inter_var4, inter_var5, inter_var6 = method3(inter_var3) 

     answer = method4(inter_var4, inter_var5, inter_var6) 

     return answer # happens to always output 42 

在这里,你可以调用Foo.method3用你喜欢的任何参数,并把它的成绩直线距离,而无需经过其他功能或任何痛苦的那样。此外,您还可以快速调用Foo.calculate_meaning_of_life FUNC计算它们放在一起(注:无法在同一行,因为这将是非常不可读),以任何你想要的变量,它所有繁重的你。

特别是从调试的角度来看,你要能够分别叫所有的人,并分析它们返回什么,因为,在最后,如果他们只能一起跑,为什么不只是有一个功能?

另外,如果您曾经为其他人安装软件包,他们会找到原因,只为他们的特定项目使用Foo.method2,所以您应该尽可能使所有已编写的代码都易于访问。

希望这会有所帮助!

0

我看到它的方式是可读性,因为utimately你(和最有可能其他人也)都将有权审查你的代码。你需要一个在这方面适合你的方法。

这是我的方法:

保持每个方法从别人不同。如果你正在考虑使用helper方法,那么把它们保存在它们所使用的方法中是一个好主意,或者(如果在同一个操作中有很多用法)只是将它们分组在他们自己的类中。

class MyClass: 
    def distinct_method(self): 
     def distinct_helper(): 
      # helper 
      return ", right?" 
     # do some distinct stuff 
     return other_distinct_method() + distinct_helper() 

    def other_distinct_method(self.): 
     # do some other distinct stuff 
     return "it should be distinct" 

if __name__ == "__main__": 
    print MyClass().distinct_method() 

一个好的经验法则是不会让一个辅助方法类的一部分,除非它是由一个以上的其他实例方法使用如:中

class MyClass2: 
    def helper(self): 
     return "help!" 

    def method1(self): 
     return "I use " + self.helper() 

    def method2(self): 
     return "I also use " + self.helper() 

代替

class MyClass1: 
    def helper(self): 
     return "help!" 

    def method1(self): 
     return "I use " + self.helper() 

    def method2(self): 
     return "I don't use helper!"