2011-01-05 4 views
1
class Complex: 
    realpart,imagpart=0,0 
    def __init__(self): 
      self.r = Complex.realpart 
      self.i = Complex.imagpart 

x = Complex() 

위의 코드는 xr, xi = (0,0)으로 작동하지만 클래스 이름이 클 경우 클래스 데이터에 액세스하는 Class_name.Data_member 방식이 매우 중복되어 나타납니다. 클래스 범위를 향상시키는 방법은 없으므로 Complex.imagpart를 사용할 필요가 없습니다. 그냥 self.r = realpart를 사용 하시겠습니까?파이썬 클래스 네임 스페이스 및 초기화 함수

+1

아니요, 아니요, Visual Basic이 아닙니다. 2. 내장형 '복합'유형을 사용하지 않는 이유는 무엇입니까? – AndiDog

+0

어쨌든 얻을 수없는 언어를 크게 수정하지 않고서는 가능하지 않습니다. 대신'C = ReallyReallyLongClassName'을 사용하고'C.realpart'를 대신 사용 하시겠습니까? 어쨌든 클래스 수준의 상수이어야한다고 생각하면 ... (편집 @AdniDog : 요점을 놓치고 있습니다 .VB가 파이썬과 다른 범위를 지정하는 유일한 언어는 아니며 클래스 이름도 그렇습니다. 아주 잘 선택하지 않음 - 예) – delnan

+0

어떤 식 으로든 Python의 문장을 줄이는 용도는 없습니다. 'C = WayTooLongClassName'은 해결책이지만, 파이썬에서 이런 식으로 사용했던 것을 기억하지 못합니다. 나는 진술서가 매우 오래 갈 수 있기 때문에 의도에 의해 예제로 VB를 선택했다. – AndiDog

답변

1

이 당신이 원하는 것입니다 (.. 또한, 그냥 그 같은 3J + 5로 쓰기 파이썬은 복잡한 숫자에 대한 기본 지원을 가지고 있습니다) "self.realpart"호출입니다. 사용중인 클래스 속성은 다음과 같이 액세스됩니다.

Complex.some_attribute 
+0

안녕하세요, 복합 (개체)에서 개체의 용도는 무엇입니까? –

+0

그것은 그것이 상속 한 것입니다. 모든 새로운 스타일의 클래스는 궁극적으로'object'를 상속합니다. 예를 들어,'Complex'에서 상속받은'SuperComplex' 클래스를 만들려면'SuperComplex (Complex) :' – Aphex

+0

thx로 쓰면 도움이됩니다! –

0

아니요. 위에서 지정한 데이터 멤버는 클래스의 특성이므로 클래스 이름을 지정해야합니다. 원하는 경우 self.r = self.__class__.realpart을 사용할 수 있습니다. 그래도이 값을 이니셜 라이저로 사용하는 것처럼 보이므로 realpartimagpart은 모두 중복됩니다.

class Complex(object): 
    def __init__(self, realpart=0, imagpart=0): 
     self.realpart = realpart 
     self.imagpart = imagpart 

를 멤버 변수에 액세스 :