class Example(object):
def the_example(self):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
클래스의 변수에 어떻게 액세스합니까? 이 정의를 추가해 보았습니다.
def return_itsProblem(self):
return itsProblem
그러나 그것은 또한 실패합니다.
class Example(object):
def the_example(self):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
클래스의 변수에 어떻게 액세스합니까? 이 정의를 추가해 보았습니다.
def return_itsProblem(self):
return itsProblem
그러나 그것은 또한 실패합니다.
답변:
대답은 몇 마디로
귀하의 예에서는 itsProblem
지역 변수입니다.
self
인스턴스 변수를 설정하고 가져 오는 데 사용해야 합니다. __init__
방법 에서 설정할 수 있습니다 . 그러면 코드는 다음과 같습니다.
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
그러나 진정한 클래스 변수를 원한다면 클래스 이름을 직접 사용하십시오.
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
하지만 theExample.itsProblem
자동으로 다음과 같도록 설정 되므로주의 해야합니다.Example.itsProblem
변수 되지만 전혀 동일한 변수가 아니며 독립적으로 변경할 수 있으므로주의해야합니다.
몇 가지 설명
Python에서는 변수를 동적으로 만들 수 있습니다. 따라서 다음을 수행 할 수 있습니다.
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
인쇄물
진실
따라서 이것이 바로 이전 예제에서 수행하는 작업입니다.
실제로 Python에서는 self
로 사용 this
하지만 그 이상입니다. self
첫 번째 인수는 항상 개체 참조이기 때문에 모든 개체 메서드에 대한 첫 번째 인수입니다. 전화하든 말든 자동으로 진행됩니다 self
.
즉, 다음을 수행 할 수 있습니다.
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
또는:
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
똑같습니다. ANY 객체 메서드의 첫 번째 인수는 현재 객체이며 self
규칙으로 만 호출합니다 .그리고 외부에서하는 것과 같은 방식으로이 개체에 변수를 추가합니다.
이제 클래스 변수에 대해.
당신이 할 때 :
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
먼저 클래스 변수를 설정 한 다음 객체 (인스턴스) 변수에 액세스 합니다 . 이 개체 변수를 설정하지 않았지만 작동합니다. 어떻게 가능합니까?
글쎄, 파이썬은 먼저 객체 변수를 얻으려고 시도하지만 찾을 수 없으면 클래스 변수를 제공합니다. 경고 : 클래스 변수는 인스턴스간에 공유되고 개체 변수는 공유되지 않습니다.
결론적으로 클래스 변수를 사용하여 객체 변수에 기본값을 설정하지 마십시오. 사용하다__init__
그것을 위해 .
결국, 여러분은 파이썬 클래스가 인스턴스이고 따라서 객체 자체라는 것을 알게 될 것이며, 이는 위를 이해하는 데 새로운 통찰력을 제공합니다. 이 사실을 알게되면 나중에 다시 읽어보십시오.
theExample.itsProblem
자동으로으로 설정 되므로주의해야합니다. 그러나 Example.itsProblem
실제적인 관점에서 *는 전혀 동일한 변수가 아니며 독립적으로 변경할 수 있습니다. * : 실제로 동일한 객체로 시작하지만 Python의 이름 바인딩을
클래스 변수가 아닌 지역 변수를 선언하고 있습니다. 인스턴스 변수 (속성)를 설정하려면
class Example(object):
def the_example(self):
self.itsProblem = "problem" # <-- remember the 'self.'
theExample = Example()
theExample.the_example()
print(theExample.itsProblem)
클래스 변수 (일명 정적 멤버) 를 설정하려면
class Example(object):
def the_example(self):
Example.itsProblem = "problem"
# or, type(self).itsProblem = "problem"
# depending what you want to do when the class is derived.
인스턴스 함수 (즉, self 전달됨)가있는 경우 self를 사용하여 다음을 사용하여 클래스에 대한 참조를 얻을 수 있습니다. self.__class__
예를 들어 아래 코드에서 tornado는 get 요청을 처리하는 인스턴스를 생성하지만, 우리는 get_handler
클래스를 확보하고이를 사용하여 riak 클라이언트를 보유 할 수 있으므로 모든 요청에 대해 하나를 생성 할 필요가 없습니다.
import tornado.web
import riak
class get_handler(tornado.web.requestHandler):
riak_client = None
def post(self):
cls = self.__class__
if cls.riak_client is None:
cls.riak_client = riak.RiakClient(pb_port=8087, protocol='pbc')
# Additional code to send response to the request ...
아래 예제와 같이 return 문을 구현하십시오! 당신은 잘해야합니다. 누군가에게 도움이되기를 바랍니다 ..
class Example(object):
def the_example(self):
itsProblem = "problem"
return itsProblem
theExample = Example()
print theExample.the_example()