2012-05-31 3 views
0

이 변수가 모든 정적 클래스에서 사용하는 것보다 Outer (변수) 인스턴스를 만들어 변수를 한 번 지정하려면 어떻게해야합니까? 정적 메서드가 아닌 다른 내부 솔루션에 Outer를 사용하는 것보다 다른 솔루션이 있습니까?Python : 내부 정적 클래스에서 외부 클래스 변수를 가져 오는 방법은 무엇입니까?

class Outer(): 
    def __init__(self, variable): 
     self.variable= variable 

    class Inner1():   
     @staticmethod 
     def work1(): 
      **print Outer.variable** 

    class Inner2():   
     @staticmethod 
     def work2(): 
      **print Outer.variable** 
+1

? 장점이 없습니다. 파이썬은 자바가 아니며 C#도 아니다. 또한 인스턴스 변수 ('some_obj.attr')와 클래스 ("static") 변수 ('SomeClass.attr')를 결합하는 것처럼 보입니다. – delnan

+2

[정적 메소드의 Guido van Rossum :] (http://groups.google.com/group/python-ideas/browse_thread/thread/6d82fd23609eff9c/eabf958d7d5f8382?lnk=gst&q=staticmethod+Guido+van+Rossum#eabf958d7d5f8382) " 그것들은 기본적으로 새로운 스타일의 클래스와 서술자를 발명했을 때의 Python 2.2 일 동안의 이라는 사고에서 비롯된 것입니다. 클래스 메서드를 구현하려고했으나 처음에는 을 이해하지 못하고 실수로 정적 메서드를 먼저 구현했습니다. 그런 다음 클래스 메소드를 제거하기에는 너무 늦었습니다. " –

+0

매우 비슷한 질문 [여기]에 대한 답변이 있습니다 (http://stackoverflow.com/questions/6665196/how-can-i-acess-a-metod-from-an-object-inside-a-class- in-python-2-6/6665452 # 6665452) 예를 들어 pyqt의 – brandizzi

답변

1

아니요. 내부 클래스 메서드는 외부 클래스의 인스턴스에 액세스 할 수 없습니다.

2

당신이 정말로 그런 일을하려는 경우, 메타 클래스는 예를 들어, 조금 도움이 될 수

from types import ClassType 

class OuterMeta(type): 
    def __new__(mcls, name, base, attr): 
     ret = type.__new__(mcls, name, base, attr) 
     for k, v in attr.iteritems(): 
      if isinstance(v, (ClassType, type)): 
       v.Outer = ret 
     return ret 

class Outer(object): 
    __metaclass__ = OuterMeta 
    var = 'abc'  
    class Inner: 
     def work(self): 
      print self.Outer.var 
     @classmethod 
     def work2(cls): 
      print cls.Outer.var 

다음

도대체 당신이 파이썬에서 내부 클래스 또는 손으로 만든 정적 클래스를 원하는 것이 왜
>>> Outer.Inner.work2() 
abc