찾다

 >  Q&A  >  본문

python - 请问这个语句中打印的变量是类变量还是实例变量?

class my_class():
    args1=1
    def fun(self):
        print self.args1
        
my_c=my_class()
my_c.fun()

请问在类里,那个self.args1 是类变量还是实例变量?类变量可以用self.args1用吗?

PHPzPHPz2888일 전490

모든 응답(5)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 17:42:17

    클래스 공간과 인스턴스 공간을 이해한다면 이 문제는 매우 간단할 것입니다. 클래스에는 고유한 네임스페이스가 있으며, 해당 내용은 className.__dict__을 통해 확인할 수 있습니다. 동일한 방식으로 인스턴스를 인스턴스화하면 이 인스턴스는 인스턴스의 멤버, 메서드 등을 저장하는 데 사용되는 고유한 네임스페이스도 갖게 됩니다. 물론 인스턴스는 확실히 클래스의 멤버를 공유할 수 있습니다.
    특히 귀하의 경우 print self.args1인 경우 인스턴스의 네임스페이스 내부를 먼저 검색하고 args1 멤버를 찾을 수 없으므로 계속해서 클래스 공간을 찾고 args1을 찾습니다. 따라서 클래스의 args1을 출력합니다. 그러나
    self.args1 = 1과 같은 할당 문이 있는 경우 인스턴스는 자체 공간에 args1 멤버를 생성합니다. 아래 코드를 보세요:

    으아악

    위의 코드와 결합하면 상대적인 본질로 이해할 수 있을 것입니다

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:42:17

    클래스 변수는 클래스 객체의 ID를 직접 출력하여 확인할 수 있으며, self에 의해 제한되는 객체 ID가 동일한지 여부는 클래스의 주소와 객체 ID가 동일할 수 있는 이유입니다. Python이 기본적으로 인스턴스 변수를 먼저 검색하고, 찾을 수 없으면 클래스 변수를 찾기 때문에 객체 변수인 것처럼 보이지만 실제로는 클래스 변수를 참조합니다.

    으아악

    자세히 살펴보면 사실 여기에서 self는 바인딩된 개체만 나타냅니다. 다른 변수 이름으로 이름을 지정할 수도 있습니다.

    으아악

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:42:17

    으아악

    결과는

    으아악

    분명히 클래스 변수입니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:42:17

    self.args1인스턴스 변수입니다.
    my_class.args1클래스 변수입니다.

    으아악

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:42:17

    self.args1 인스턴스 변수입니다.
    my_class.args1 클래스 변수입니다.

    회신하다
    0
  • 취소회신하다