-1
저는 python documentation과 this SO answer도 this입니다. getattr을 사용할 때 속성 객체 포인터를 얻고 있습니다. 메신저에서 값을 가져 오거나 인쇄 할 수 없습니다.속성 장식자를 사용하여 함수 내에서 목록 이해를 사용하여 명명 된 튜플에서 값을 복구합니까?
class DefaultSettings():
"""This contains default game settings."""
def __init__(self):
"""Default settings"""
self.Keyboard = namedtuple('Keyboard', ['gas', 'reverse', 'sbreak', 'ebreak', 'left', 'right'])
self.Keyboard(gas = 'WKEY', reverse = 'SKEY', sbreak = 'SKEY', ebreak = 'SPACEKEY', left = 'AKEY', right = 'DKEY')
@property
def keyboard(self):
return [getattr(self.Keyboard, key) for key in self.Keyboard._fields]
settings = DefaultSettings()
print("keyboard 1: ",settings.keyboard)
print("Keyboard 2: ",settings.Keyboard)
print("keyboard 3: ",settings.Keyboard._fields)
print("Keyboard 4: ", DefaultSettings.keyboard.__get__)
print("Keyboard 5: ", DefaultSettings.keyboard.__get__(settings, DefaultSettings))
for key in settings.Keyboard._fields:
print(getattr(settings.Keyboard, key))
및 출력 :
D:\Games\BSR\scripts>python config.py
keyboard 1: [<property object at 0x000001C18DDC4778>, <property object at 0x000001C18DDC4AE8>, <property object at 0x000001C18DDC4B38>, <property object at 0x000001C18DDC4B88>, <property object at 0x000001C18DDC4BD8>, <property object at 0x000001C18DDC4C28>]
Keyboard 2: <class '__main__.Keyboard'>
keyboard 3: ('gas', 'reverse', 'sbreak', 'ebreak', 'left', 'right')
Keyboard 4: <method-wrapper '__get__' of property object at 0x000001C18DDC4598>
Keyboard 5: [<property object at 0x000001C18DDC4778>, <property object at 0x000001C18DDC4AE8>, <property object at 0x000001C18DDC4B38>, <property object at 0x000001C18DDC4B88>, <property object at 0x000001C18DDC4BD8>, <property object at 0x000001C18DDC4C28>]
<property object at 0x000001C18DDC4778>
<property object at 0x000001C18DDC4AE8>
<property object at 0x000001C18DDC4B38>
<property object at 0x000001C18DDC4B88>
<property object at 0x000001C18DDC4BD8>
<property object at 0x000001C18DDC4C28>
D:\Games\BSR\scripts>
'self.Keyboard'는 여전히 클래스이며 인스턴스가 아닙니다. 인스턴스를 만들 때 아무 것도 지정하지 않습니다. 왜 그 클래스를 init 메소드 밖에서 만들고, 심지어 DefaultSettings 외부에서 만들지 않겠습니까? – jonrsharpe
나는 방금 그렇게했고 출력은 같습니다. – Strapicarus
왜'return list (self.Keyboard)'를 쓰지 않으시겠습니까? 이름은 제쳐두고, 여전히 기본적으로 값의 튜플입니다. – jonrsharpe