2011-04-28 1 views
2

함수에서 인스턴스 변수를 초기화하는 가장 좋은 방법은 무엇입니까? 같은 이름을 두 번 사용하는 것이 좋지 않습니까?파이썬에서, __init__ 인수와 인스턴스 변수에 같은 이름을 사용하는 것을 피하는 가장 좋은 방법은 무엇입니까?

class Complex: 
    def __init__(self, real, imag): 
     self.real = real 
     self.imag = imag 

그것은이 같은 임의의 대체 이름과 함께 와서 나에게 실수 같습니다

class Complex: 
    def __init__(self, realpart, imagpart): 
     self.r = realpart 
     self.i = imagpart 

나는 이것이 PEP 8 스타일 가이드에서 해결하고 있다고 생각하지 않습니다. 인스턴스 변수와 메소드 이름은 단어를 구분하는 밑줄로 소문자 여야합니다.

+3

가독성이 어느 것이 좋을까요? – ptomato

+0

이 예제에서는 두 번째가 가장 읽기 쉽지만 더 복잡한 예제에서는 여러 가지 종류의 인수가 있지만 두 예제 모두 잘 작동하지 않는 것 같습니다. –

답변

13

아마도 주관적이지만 동일한 이름을 두 번 사용하는 것은 좋지 않은 스타일이라고 생각하지 않습니다. self은 Python에 함축되어 있지 않으므로 self.realreal은 완전히 별개이며 다른 언어 (예 : C++/Java의 경우 멤버와 같은 이름 지정 매개 변수가 다소 눈살을 찌푸림) 에서처럼 이름 숨기기 등의 위험이 없습니다.

사실, 매개 변수에 멤버와 동일한 이름을 지정하면 매개 변수가 멤버에 하나씩 매핑된다는 강력한 의미의 힌트가 제공됩니다.

+3

+1 : 두 이름이 같은 경우 코드 읽기가 간단합니다. –

+0

다른 언어에 암묵적인 self/this를 사용하는 경우 반복되는 이름은 좋지 않은 것처럼 보일 수 있지만 python *은 자기를 사용하도록 강제하므로 필드 이름에 접두사를 추가하는 것과 같습니다 (C++에서는 m_Real 또는 _real과 같은 것을 사용했을 수도 있습니다). –

4

기본 인스턴스 변수의 이름을 변경해야하는 몇 가지 이유가 있지만 실제로 수행해야하는 작업에 크게 의존합니다. 좋은 예가 속성의 사용과 함께 제공됩니다.

class MyClass: 
    def __init__(self, x, y): 
    self._x, self._y = x, y 

    @property 
    def x(self): 
    return self._x 

    @x.setter 
    def x(self, value): 
    print "X is read only." 

    @property 
    def y(self): 
    return self._y 

    @y.setter 
    def y(self, value): 
    self._y = value 

이 만든 것 두 개의 값으로 인스턴스화 할 수있는 클래스를 : 당신은, 예를 들어, 당신이 그렇게 같은 다른 변수 아래를 저장할 의미 덮어 쓰기되지 않는 변수를 만들 수 있습니다 , x와 y, 그러나 x는 바꿀 수 있지만 y는 바꿀 수 없습니다.

그러나 일반적으로 인스턴스 변수에 동일한 이름을 다시 사용하는 것이 명확하고 적절합니다.

관련 문제