2013-05-27 4 views
0

작동하도록 코드를 가져올 수 있지만 생성자 외부의 클래스에서 인스턴스 메서드를 설정하는 것이 맞는지 궁금합니다. 내가 이것을 썼을 때, 그것은 옳다고 느끼지 않았지만 나는 생성자 안에서 그것을 할 수있는 방법을 알 수 없었다. 이것을 리펙토링하는 방법에 대한 도움은 크게 감사하겠습니다.파이썬에서 생성자 밖에 인스턴스 메서드를 생성합니다.

감사합니다.

class Parser(): 

    def __init__(self, uri): 
     self.uri = uri 

    def createSoup(self): 
     htmlPage = urlopen(self.uri) 
     htmlText = htmlPage.read() 
     self.soup = BeautifulSoup(htmlText) 

def main(): 
    urls = Url().return_urls() 
    p = Parser(urls[test]) 
    p.createSoup() 
    print(p.soup) 


if __name__ == '__main__': 
    main() 

지금과 같은 생성자에서 self.soup을 설정하는 내가 더 좋을 거라 생각했지만, 내가 작업에 얻을 수 있었다 :

def __init__(self, uri): 
    self.uri = uri 
    self.soup = BeautifulSoup(htmlText) 
+0

이것은 방법이 아니며 속성입니다. 또한, 당신이'__init__'에서 그것을 시도했을 때 어떤 식으로 작동하지 않았습니까? – BrenBarn

답변

1

윌이 당신을 도울? init 내에서 createSoup 함수를 호출하십시오.

class Parser(): 

    def __init__(self, uri): 
     self.uri = uri 
     self.soup = self.createSoup() 

    def createSoup(self): 
     htmlPage = urlopen(self.uri) 
     htmlText = htmlPage.read() 
     return BeautifulSoup(htmlText) 

다른 방법 main() 메소드에 BeautifulSoup로 인스턴스를 생성하고 파서 (URL이 [시험] BeautifulSoup_instance)으로 파서를 매개로 보내이 초기화() 함수를 self.soup에 할당하는 것이다.

관련 문제