2014-12-16 6 views
0

다음 코드에서 마지막 줄의 실행에서 오류가 발생하는 이유는 무엇입니까? x.bf()의 점 연산자가 인스턴스 'x'를 함수 bf (예 : x.af())로 전달해야합니까?다음 코드에서 마지막 줄의 실행에서 오류가 발생하는 이유는 무엇입니까?

class A: 
    a = 6 
    def af (self): 
     return "Hello-People" 

class B: 
    b = 7 
    def bf (self): 
     return "Bye-People" 

>>> x = A() 
>>> b = B() 
>>> x.bf = B.bf 
>>> x.bf() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: bf() missing 1 required positional argument: 'self' 
+0

Google 오류입니다. – Maroun

답변

1

x.bf = B.bf는 오류이므로 B는 개체의 인스턴스가 아니기 때문에 클래스입니다.

x.bf를 직접 클래스에 할당 할 수 없습니다. x.bf를 'b.bf'인스턴스에 할당하거나 클래스를 올바르게 인스턴스화해야합니다.

즉.

# Where we instantiated class B and invoke bf via lazy loading (loading at the last possible minute) 
x.bf = B().bf 

또는

# Use the existing instance of B and call bf 
x.bf = b.bf 

상세 정보 :

  1. 는 A와 B가 수업입니다 어느 쪽이든 라인을 변경합니다. 당신이 그들을 인스턴스화 할 때까지 그들은 아무 것도하지 않습니다.
  2. x와 b는 개체 인스턴스입니다. x는 A의 인스턴스이고 b는 B의 인스턴스입니다.
  3. 클래스를 인스턴스화 할 때마다 생성자 서명을 준수해야합니다. 이 경우 클래스는 self 외에도 추가 매개 변수가 필요하지 않습니다. 그러나()를 통해 클래스가 호출되면 self는 전달됩니다.

    'X = A()'와 'B = B()'그 서명에 부합

    당신이 발생한 오류는 기본적으로 파이썬 당신이에 통과하지 않고 뭔가, 함수 또는 클래스라는 사실을 말하고있다 필수 변수.

+0

이것이 더 자세한 이유를 설명해주십시오. 확실히. – user3260901

+0

. 게시물을 업데이트하기 위해 잠시만 기다려주십시오. – rurouni88

+0

하지만 마지막 줄 x.bf()에서 x는 인스턴스 변수입니다. 그래서 자기 자신을 bf에게 넘겨서는 안 되는가? – user3260901

관련 문제