2017-05-17 13 views
1

pycharmを使用して、メソッドをクラスにリファクタリングする必要があります。 電流(Staticmethodはするだろう):関数/メソッドをクラスに移動する

import math 

class Solver(object): 
    def __init__(self, a, b, c): 
     self.a = a 
     self.b = b 
     self.c = c 


def demo(b, a, c): 
    d = b ** 2 - 4 * a * c 
    if d >= 0: 
     disc = math.sqrt(d) 
     root1 = (- b + disc)/(2 * a) 
     root2 = (- b - disc)/(2 * a) 
     print(root1, root2) 
     return root1, root2 
    else: 
     raise Exception 


s = Solver(2, 123, 0.025) 
demo(s.b, s.a, s.c) 

希望: "トップレベルに関数/メソッドの移動":私は基本的に反対の機能を取得しようとしています

import math 

class Solver(object): 
    def __init__(self,a,b,c): 
      self.a = a 
      self.b = b 
      self.c = c 

    def demo(self, a, b, c): 
      d = self.b ** 2 - 4 * self.a * self.c 
      if d >= 0: 
       disc = math.sqrt(d) 
       root1 = (- self.b + disc)/(2 * self.a) 
       root2 = (- self.b - disc)/(2 * self.a) 
       print(root1, root2) 
       return root1, root2 
      else: 
       raise Exception 

Solver(2, 123, 0.025).demo() 

ここに記載されているとおり:

init paramsを持たないクラスのために私は気にしません。

+1

なぜあなたはクラスをやりたいのですか?ここでは役に立たないようです。 – user2357112

+1

クラスまたはメソッドの呼び出しでargsを渡しますか? – Max

答えて

0

デフォルトでは、このようなオプションはありません。PyCharmは、クラスとメソッドのリファクタリングにはかなり優れていますが、スタンドアロン機能ではあまり効果がありません。 しかし、あなたの問題の解決策があります:正規表現!

基本的に、何をしなければならないことは次のとおりです。有界方法に

  1. 変更機能を(あなたはすでにあなたの例ではということでした)
  2. はリファクタリングと古いメソッド呼び出しのすべてのオカレンスを置き換えます。ここで

あなたは上記の例のためにすることをやらせるだろう正規表現です:

([\w]+)[ \t]+=[ \t](Solver[ \t]*\(([\d.]+)[ \t]*,[ \t]*([\d.]+)[ \t]*,[ \t]*([\d.]+)[ \t]*\))\n\r?demo[ \t]*\(\1\.b[ \t]*,[ \t]*\1\.a[ \t]*,[ \t]*\1\.c[ \t]*\) 

そして、ここでは、交換です:

$2\.demo() 

今、あなたはPyCharmでEdit -> Find -> Replace in Pathを選択することができ、正規表現をチェック最初の正規表現を最初のフィールドに、2番目の正規表現を次のフィールドに貼り付けます。私は1つのファイルをローカルでテストして、うまくいきました。ここにはregex101 exampleがありますので、試して試して試すことができます。

これは、そのメソッドの使用法が多い場合に役立ちます。そうしないと、手動で行うほうが速くなる可能性があります。

+0

私は返信のおかげで多くの用途があります –

関連する問題