2009-10-28 6 views
1

저는 초보자이며 파이썬에서 Class의 구문을 이해하기가 매우 어렵습니다. C/C++, java 및 objective C의 배경을 가지고 있습니다. 파이썬에서 주목할만한 큰 차이점은 클래스의 "데이터 멤버"를 명시 적으로 선언하지 않고 무작위로 추가한다는 것입니다. 그리고 그것은 아주 큰 혼란을 가져옵니다.클래스를 파이썬으로 이해하는데 도움주세요

하자 내가 클래스를

class MyClass: 

    def __int__(self, a, b): 

     self.a = a 

     self.b = b 

이 그리고 내가 객체를 시작할 때 말한다.

myobject = MyClass(10,10) 

그리고

단지 내가이 수업 시간에 다른 매개 변수를 필요로 알게하지만 난 생성자를 사용하여 그것이 어떤 특정 조건에 따라 다른 함수에 의해 시작되기 때문에 것을 시작하고 싶어 그나마 어떤 이유로 몇 시간 후 그래서 변수가 실제로 출생한다는 점만 지적하게 될 코드의 모든 엉망진창에서. 디버깅하는 동안 코드를 검사하거나 혼란 스러울 다른 이유로 검토 할 때가 아닌가?

+3

많은 단어를 사용하고 있습니다. 나는 그 의미를 알지 못합니다. 뭐? –

+0

@NSD는 내가 파이썬에 대해 아주 익숙하고 파이썬 전문 용어를 알지 못할 수도 있다고 말한 것 같습니다. – itsaboutcode

+0

나는 큰 단어보다 문법적 인 구조의 문제라고 생각한다 – Jimmy

답변

2

실제로는 을 사용해야합니다. 텍스트에 : P

당신은 의미 수 : 한마디로

class MyClass: 
    def __int__(self, a, b, c=None): 
     self.a = a 
     self.b = b 
     self.c = c 

one = MyClass(1,2) 
one.C# None 
two = MyClass(1,2,3) 
two.C# 3 
+0

그것은 좋은 해결책 인 것처럼 보입니다.하지만 누군가가이 새로운 필드를 아무에게도 할당하지 않은 것을 잊어 버렸을 경우, 너무 쉽게 생각하면 안됩니다. 많은 문제가 있습니까? – itsaboutcode

+0

'__init__'에'c = None'을 쓰지 않으면 3 개의 매개 변수로만 객체를 생성 할 수 있습니다. –

+1

내가 말하는 것이 옳다고 생각한다. 파이썬은 아이를위한 것이 아니라 성인을위한 것이다. lox ... – itsaboutcode

5

, .

네 말이 맞아. Python을 사용하면 언제든지 객체에서 구성원을 추가 (및 제거) 할 수 있습니다. 다른 함수가 할 수없는 것을 할 수있는 생성자에 특별한 것은 없습니다.

클래스의 모든 인스턴스에 항상 동일한 멤버가 있는지 확인하려면 의미가없는 인스턴스의 경우 None과 같은 센티넬 값을 사용하여 모든 멤버를 항상 생성자에 할당합니다. 값은 아직 생성자 외부에 새 멤버를 추가하지 않아야합니다.

개체를 조작하는 방법은 당신에게 달려 있습니다. 정적 인 방식으로 작업을하고 싶거나 임의의 시간에 멤버를 추가 및 제거하는 기능을 이용하려면 괜찮습니다. 너무. 파이썬 자체는 어떤 규칙도 부과하지 않는다.

+0

하지만이 "너무 많은"자유가 큰 프로젝트에서 많은 문제를 일으킬 수 있다고 생각하지 않습니까? – itsaboutcode

+0

@itsaboutcode : 예, 가능합니다. 그렇기 때문에 파이썬은 당신이 임의의 시간에 임의의 멤버를 추가하지 않도록 하지요. 당신은 당신 자신의 규칙을 만들어 그것들을 고집 할 것인지를 결정할 수 있습니다. – RichieHindle

+0

당신은'hasattr'과 자매들에 대해 언급해야합니다. – hasen

0
class MyClass: 
    def __int__(self, a, b): 
     self.a = a 
     self.b = b 
     self.c = None #This line is optional 

    def set_c(self, c): 
     self.c = c 

어떤 사람들은 __init__의 모든 속성을 나열하는 것을 선호합니다. 당신은 할 필요는 없지만 선택할 수있는 이유는 여러 가지가 있습니다.
아마도 강조 표시 또는 완료 코드를 이해하는 편집자의 능력을 향상시킬 수 있습니다.
아마도 당신이 선호하는 스타일 일 것입니다.

관련 문제