[PYTHON] 파이썬 수퍼 클래스와 부모 클래스 속성 설정하기
PYTHON파이썬 수퍼 클래스와 부모 클래스 속성 설정하기
나는 파이썬 슈퍼 ()와 상속 및 속성에 대해 정말로 이상한 문제를 겪고있다. 첫째, 코드 :
#!/usr/bin/env python3
import pyglet
import pygame
class Sprite(pyglet.sprite.Sprite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.x, self.y
@property
def x(self):
return super().x
@x.setter
def x(self, value):
super(Sprite, self.__class__).x.fset(self, value)
self.rect.centerx = value
@property
def y(self):
return super().y
@y.setter
def y(self, value):
super(Sprite, self.__class__).y.fset(self, value)
self.rect.centery = value
이것은 잘 작동합니다. 그러나, 내가 원하는 것 (나에게 파이썬으로 보이는 것)
#super(Sprite, self.__class__).x.fset(self, value)
super().x = value
비록
super().x
값을 잘 얻는다. 이 경우 x는 fset과 fget가 정의 된 수퍼 클래스의 속성입니다. 그럼 왜 작동하지 않습니까?
해결법
-
==============================
1.나는이 행동이 왜 그런지를 뒷받침 할 정확한 언어를 찾으려고 노력했다. 그래서 "단지 그것이 있기 때문에"당신에게 대답을주지 않기 위해서였다. 그러나이 질문은 한 번 이상 물어 보았다. 그것은 super ()의 행동으로 귀결된다. 이 정확한 동작에 대한 2010 토론은 http://mail.python.org/pipermail/python-dev/2010-April/099672.html에서 확인할 수 있습니다.
나는이 행동이 왜 그런지를 뒷받침 할 정확한 언어를 찾으려고 노력했다. 그래서 "단지 그것이 있기 때문에"당신에게 대답을주지 않기 위해서였다. 그러나이 질문은 한 번 이상 물어 보았다. 그것은 super ()의 행동으로 귀결된다. 이 정확한 동작에 대한 2010 토론은 http://mail.python.org/pipermail/python-dev/2010-April/099672.html에서 확인할 수 있습니다.
궁극적으로 super () 호출은 setter가 아닌 getter에 직접 액세스 할 수있게 해줍니다. setter는 fset () 또는 __set __ ()를 통해 액세스해야합니다. 아마도 "super () 기능 만 지원하지 않습니다"라고 쉽게 설명 할 수 있습니다. "set"연산 (따라서 fset () 메서드 호출)에서 왼손잡이 지정의 setter가 아닌 "get"연산의 속성 기능을 해결합니다. 이 토론 스레드의 날짜에서 알 수 있듯이 super ()가 도입 된 이래로 분명히 이렇게되었습니다.
어쩌면 다른 누군가가 기술적으로 더 구체적인 이유가있을 수 있지만 솔직히 나는 그것이 중요하지 않을 지 모른다. 지원되지 않는다면 충분히 좋은 이유가 있습니다.
from https://stackoverflow.com/questions/10810369/python-super-and-setting-parent-class-property by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Google App Engine 용 Mac OSX 10.5.8에 PIL을 설치하는 방법은 무엇입니까? (0) | 2018.11.22 |
---|---|
[PYTHON] SyntaxError invalid token (0) | 2018.11.22 |
[PYTHON] Cython : cimport 및 가져 오기 numpy로 (모두) np (0) | 2018.11.22 |
[PYTHON] super ()와 superclass를 직접 호출하는 것의 차이점 (0) | 2018.11.22 |
[PYTHON] 파이썬 요청이 내 URL을 백분율로 인코딩하는 것을 방지하려면 어떻게해야합니까? (0) | 2018.11.22 |