2017-10-09 10 views
0

I가 다음 코드는 info 매개 변수는 아무것도 (STR, INT, 목록 등)가 될 수 있습니다클래스 객체가 변수 이름을 가지고이를 나타낼 수있는 방법이 있습니까?

class MyClass(): 
    def __init__(self, info): 
    self.info = info 

object_1 = MyClass("Whatever 1") 
object_2 = MyClass("Whatever 2") 
object_3 = MyClass("Whatever 3") 

my_list = [object_1, object_2, object_3] 

print(my_list) 

당신이 그것을 실행하면 다음과 같은 결과를 얻을 것이다 :

[<MyClass object at 0x7f**********>, <MyClass object at 0x7f**********>, <MyClass object at 0x7f**********>] 

하지만이 인쇄 print(my_list) 싶습니다 다음또 다른 매개 변수를 추가하지 않고,

[object_1, object_2, object_3] 

그렇게 할 수있는 방법이 있나요을함수 정의 (예 : def __init__(self, info, representation):) 그 값을 반환하는 __repr__을 정의하십시오 (예 : return representation)?

+2

변수 이름이 표현으로 표시되기를 원하십니까? 동일한 객체가 두 개의 다른 변수에 의해 참조되는 경우 어떻게 될까요? – schwobaseggl

+0

그냥 "__init__' 함수 정의에"다른 매개 변수 "를 사용하십시오. 명확하고 사용하기 쉽고 유지 관리가 쉽습니다. 변수 이름을 실제 파이썬 객체에 연결하는 모든 솔루션은 깨지기 쉬울뿐만 아니라 사용하기가 쉽지 않습니다. – MSeifert

+0

@MSeifert 그래서 내가 "그렇게 할 수 있을지"묻는 것입니다. 물론 처음에는 __init__에 다른 매개 변수를 추가 할 수 있었지만 내가 요구 한 일을 수행하는 것이 가능하다는 것을 알고 싶었습니다. –

답변

0

나는이 작업을 권장하지 않으며 클래스와 변수가 다른 모듈에 있거나 여러 바인딩과 같은 모든 종류의 복잡성에 강하게 대처하는 방법에 대해 확실하지 않습니다. 인스턴스. 그냥 재미를위한주의의 모든 종류와 그러나

는 여기에 클래스와 해당 인스턴스가이 출력을 제공

import sys 

class Magic: 

    def __repr__(self): 
     module = sys.modules[self.__class__.__module__] 
     for name, object_ in vars(module).items(): 
      if object_ is self: 
       return name 
     else: 
      return '<name not found>' 


apple = Magic() 
banana = Magic() 
cherry = Magic() 

fruit = [apple, banana, cherry] 
print(fruit) 

동일한 모듈에 결합하는 것으로 가정 개념 증명의

[apple, banana, cherry] 
+0

이 모듈은 현재 모듈 외부에서 모듈을 생성하자마자 중단됩니다 (언급했지만 다시 강조하기를 원했습니다). 나는 실제로 재미있을지라도 해결해서는 안되는 문제에 대한 해결책을 찾도록 격려하기 위해 조언하지는 않을 것입니다 (적어도 질문은 묻지 않습니다). – MSeifert

+0

@MSeifert ... 이것이 내가이 일을 권장하지 않는다는 말로 다른 대답을 시작한 이유이며, 다른 모듈에서 작동하지 않을 것이라는 의미입니다. – jacg

+0

예 알아요. 나는 단지 그 점에 밑줄을 긋고 싶었다. – MSeifert

2

동일한 변수에 대한 참조가 두 개 이상있는 경우 사용하기가 매우 어려워집니다. 가장 좋은 방법은 클래스의 모든 해시를 추적하고 레지스트리 객체를 참조하는 일종의 레지스트리 클래스를 사용하는 것이며, __iter__ 메소드를 포함하는 것이 가장 좋습니다.