2017-03-11 1 views
-2

클래스에 정의 된 함수를 호출 할 때 TypeError 문제가 발생했습니다. 오류는 다음과 같습니다 그런 TypeError: p() takes exactly 1 argument (2 given)클래스 함수의 인수 문제 파이썬

class HTMLGen: 
    def p(text): 
     return ("<p>%s</p>" % text) 
    def a(text): 
     return ("<a>%s</a>" % text) 
    def b(text): 
     return ("<b>%s</b>" % text) 
    def title(text): 
     return ("<title>%s</title>" % text) 
    def comment(text): 
     return ("<!--%s-->" % text) 
    def div(text): 
     return ("<div>%s</div>" % text) 
    def span(text): 
     return ("<span>%s</span>" % text) 
    def body(text): 
     return ("<body>%s</body>" % text) 

의 HTMLGen 클래스를 가져오고

>>> import htmlgen 
>>> website = htmlgen.HTMLGen() 
>>> paragraph = website.p("Hello World!") 

하고 Enter 키를 누르면이 방법에게 HTMLGen.p(t) 기능을 사용하려고 시도 후, 나는 언급 한 오류가 발생합니다. 왜 HTMLGen.p()와 다른 함수가 하나 이상의 인수를 얻는지를 아는 사람이 있습니까? 그리고 이것이 일어나지 않도록하는 가장 쉬운 방법은 무엇입니까?

+2

클래스의 메소드는 항상'self'와 당신이 준 다른 인자를 전달합니다. 'self'와'text'는 두 개의 인수이지만, 여러분의 메소드는 * one * 인수 만 허용합니다. 그들 모두에게'self'를 추가하거나 정적 함수로 만드십시오. 왜 이걸 처음에 수업에 넣었 니? –

+0

'website.p ("Hello World!")'는'HTMLGen.p (웹 사이트, "Hello World!")'에 해당하는 첫 번째 근사값이며, 그 방법이 왜 필요한지 이해하게 될 것입니다 두 개의 매개 변수로 정의됩니다. – chepner

답변

0

클래스 안에 함수를 만들 때마다 클래스 안에있는 모든 함수에 자체 인수가 있어야합니다.

class HTMLGen: 
    def p(self,text): 
     return ("<p>%s</p>" % text) 
    def a(self,text): 
     return ("<a>%s</a>" % text) 
    def b(self,text): 
     return ("<b>%s</b>" % text) 
    def title(self,text): 
     return ("<title>%s</title>" % text) 
    def comment(self,text): 
     return ("<!--%s-->" % text) 
    def div(self,text): 
     return ("<div>%s</div>" % text) 
    def span(self,text): 
     return ("<span>%s</span>" % text) 
    def body(self,text): 
     return ("<body>%s</body>" % text) 
+0

감사! 나는 '자기'논증에 대해 배우면서 기억하지만 결코 여기에서 사용하는 것을 생각하지 않았다. –

0

자기라는 관례에 따라 매개 변수를 추가해야합니다. 그것은 객체 자체를 참조합니다. 많은 프로그래밍 언어는 대신 this 키워드를 사용합니다.

def span(self, text): 
    return ("<span>%s</span>" % text)