표준 데이터 유형이 아닌 클래스 속성을 어떻게 만드나요?

StackOverflow https://stackoverflow.com/questions/379995

  •  22-08-2019
  •  | 
  •  

문제

다른 클래스가 있는데 다른 클래스가 있습니다. 그래도 표준 데이터 유형은 아닙니다. 코드는 다음과 같습니다.

class graphics:
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"

내가해야 할 일은 스크린 속성을 참조하는 것입니다. 스크린으로 설정할 수 있고 해당 클래스 내에서 읽을 수 있습니다 ...하지만 다른 클래스에서 설정해야합니다.

screen = ?

아래에

class graphics:

그 물음표는 무엇이어야합니까? 나는 0, 없음 "," "..."... 아무것도 작동하지 않는 것 같다. 나는 pygame 호출이 어떤 데이터 유형인지 전혀 모른다. :에스

도움이 되었습니까?

해결책

클래스의 참조 속성은 거의 없습니다. 당신은 객체의 속성을 참조합니다.

(또한 클래스 이름은 대문자 여야합니다. Graphics).

class Graphics:
SCREEN_SIZE = (640, 480)
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    self.SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"

다음은 객체의 속성을 얻거나 설정하는 예입니다.

g= Graphics() # create an object
# access the object's instance variables
print "screen", g.screen
g.screen= pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)

우리는 객체를 만들었습니다.g) 우리 수업에서 (Graphics). 우리는 수업을 전혀 언급하지 않습니다. 클래스 이름이 사용되는 거의 유일한 시간은 객체 인스턴스를 만드는 것입니다.Graphics()). 우리는 거의 말하지 않습니다 Graphics.this 또는 Graphics.that 클래스 자체의 속성을 참조합니다.

다른 팁

Python의 클래스와 인스턴스 속성의 차이에 대한 짧은 설명이 도움이 될 수 있다고 생각합니다.

그렇게 코드를 작성할 때 :

class Graphics:
    screen_size = (1024, 768)

클래스 Graphics 실제로 객체 자체 - 클래스 객체입니다. 당신이 정의했기 때문에 screen_size 그것의 내부, screen_size 의 속성입니다 Graphics 물체. 다음에서 볼 수 있습니다.

assert Graphics.screen_size == (1024, 768)

파이썬 에서이 클래스 객체는 함수처럼 사용할 수 있습니다. 호출 구문을 사용하십시오.

g = Graphics()

g 클래스의 "인스턴스"라고합니다 Graphics. 클래스의 인스턴스를 만들 때 인스턴스의 속성과 일치하지 않는 모든 속성 조회는 다음 클래스 객체의 속성을 다음에 보입니다. 이것이 바로이 조회가 작동하는 이유입니다.

assert g.screen_size == (1024, 768)

우리가 속성을 추가하면 사례 그러나 같은 이름을 사용하면 인스턴스의 조회가 성공할 것이며 클래스 객체를 바라 보지 않아도됩니다. 기본적으로 인스턴스에 직접 설정된 값으로 클래스 객체의 값을 "마스크"합니다. 이것에 주목하십시오 그렇지 않습니다 클래스 객체에서 속성 값을 변경하십시오.

g.screen_size = (1400, 1050)
assert g.screen_size == (1400, 1050)
assert Graphics.screen_size == (1024, 768)

그래서, 당신이 당신의 일을하고 있습니다 __init__ 방법은 바로 그거죠 위에서 한 일 : 속성 설정 사례, self.

class Graphics:

    screen_size = (1024, 768)

    def __init__(self):
        self.screen_size = (1400, 1050)

g = Graphics()
assert Graphics.screen_size == (1024, 768)
assert g.screen_size == (1400, 1050)

가치 Graphics.screen_size 위의 스 니펫에서 첫 번째 Assert 진술서와 같이이 클래스 정의 후 어디서나 사용할 수 있습니다.

편집 : 체크 아웃을 잊지 마십시오 수업에 대한 Python 튜토리얼 섹션, 이 모든 것을 다루는 것.

아마도 가능할 것입니다 object 유형

self.screen = object()

작동 할 수 있습니다 (귀하의 질문을 올바르게 이해 한 경우).

Ugh ... Pebkac.

나는 C에 너무 익숙해 져서 Defs 외부에서 단순한 프로토 타입 이상을 할 수 있다는 것을 잊어 버린다.

이것으로 다시 작성하고 효과가있었습니다.

class graphics:
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    self.SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top