2017-12-17 11 views
1

데이터를 전처리하는 별도의 메소드를 작성하는 것이 좋습니다 (예 : 전처리가 번거로운 경우).파이썬에서 데이터를 클래스 생성자에 전달하기 전의 사전 처리 데이터

class C(): 
    def __init__(self, input, more_input): 
     self.value = self.prepare_value(input, more_input) 

    def prepare_value(self, input, more_input): 
    #here I actually do some nontrivial stuff, over many lines 
    #for brevity I'm illustrating just a short, one-line operation 
     value = (input + more_input)/2 
     return value 


print(C(10, 33).value) # has value 21.5 
+1

예 그게 현명한 것 같다. 당신의 용어가 옳지 않다는 것에 주목하십시오. 생성자 전에 전처리를 수행하지 않습니다. 당신은 생성자에서 그것을하고 있습니다. 그것의 결코 결코 분명한 그것의 항상 분별있는 또는 항상 그것의 분별없는 말로 잘리는. 그것은 당신의 클래스가 무엇을하는지, 하나의 클래스에 너무 많은 책임을 할당하고 그것을 생성자에서 대량의 사전 처리를 요구함으로써 너무 많은 다른 기능에 연결하는 경우에 달려 있습니다. –

답변

1

이렇게하고 싶다면 두 가지를 제안하십시오.

  1. @staticmethod 장식으로 장식하여 prepare_value() 방법에게 static method를 확인합니다. 클래스 자체의 인스턴스를 변경하지 않으므로 값을 반환하면 인스턴스의 메서드가 될 수 없습니다. 따라서 @staticmethod.
  2. _prepare_value()이라는 이름을 사용하여 메서드를 내부적으로 사용해야 함을 나타냅니다. 이것은 실제로 비공개로 만들지는 않지만 다른 개발자 (즉, 미래의 사용자)에게 "이 방법은 외부에서 사용하도록 설계되지 않았습니다"라고 말하는 것이 잘 알려져 있습니다.

전반적으로 나의 제안은 다음과 같습니다

class C(): 
    def __init__(self, input, more_input): 
     self.value = self._prepare_value(input, more_input) 

    @staticmethod 
    def _prepare_value(input, more_input): 
     value = (input + more_input)/2 
     return value