그래서 파이썬에서는 메서드에서 선언 된 변수가 메서드 외부에서 볼 수 없다는 것을 알고 있습니다. 그러나 그들의 생활주기는 무엇입니까? 메서드 내에서 선언 된 변수는 해당 메서드가 호출 될 때마다 만들어지기를 기대합니다.파이썬 메서드 변수 및 메서드에서 만든 개체
다음과 같은 이유로 문의하고 있습니다. 나는 다음과 같은 방법을 사용한다 (이것은 체리 피와 함께 사용된다. 아마도 관련이 없지만, 어떤 식 으로든 영향을 줄 수있는 기회를 위해 추가 할 것이다). 내가 사용
먼저 사용자 정의 필터 클래스 : 이제
class Filter():
"""
Class used to filter tables displayed in UI, based on few criteria.
Initialize filter with a list of fields, and correspondinf values.
"""
def __init__(self, display_name= "", fields= [], values= [], operations= []):
self.display_name = display_name
self.fields = fields
self.values = values
self.selected = False
self.operations = operations
방법 I에 대한
@cherrypy.expose
@logged()
def getfiltereddatatypes(self, name, filters, datatype):
...some mumbo jumbo...
default_filter = self._get_default_filters(inputTree, name)
#default_filter here can be a object of type Filter if defined or None otherwise
print "RECIEVED " + str(filters)
if default_filter is not None:
print "CREATING NEW"
new_filter = copy.deepcopy(default_filter)
else:
print "CREATING NEW"
new_filter = Filter()
[new_filter.fields.append(value) for value in filters['fields']]
[new_filter.operations.append(value) for value in filters['operations']]
[new_filter.values.append(value) for value in filters['values']]
print "LENGTH =" + str(len(new_filter.fields))
...Some other mumbo jumbo....
그래서 기본적으로 나는에 매개 변수로 받았습니다 필터 값을 추가 할 얘기 해요 filters
변수를 default_ones로 변경하십시오. 하지만이 방법을 호출 할 때마다이 작업을 수행하거나 더 잘 설명하려면 인쇄물에 내 문제를 표시했습니다. 그래서 첫 번째 메서드 호출에서 :
RECIEVED {'operations': ['!='], 'fields': ['model.DataType.subject'], 'values': ['w']}
CREATING NEW
LENGTH =1
예상대로 따라서, 새로운 필터 개체가 만들어지고 받았다 매개 변수에서 작업, 필드 및 값을 추가, 길이 (필드) = 1.하지만 내 두 번째에 패스 :
RECIEVED {'operations': ['!='], 'fields': ['model.DataType.subject'], 'values': ['']}
CREATING NEW
LENGTH =2
이제이 동작을 설명 할 수 없습니다. 보시다시피 if의 새 brach 만들기가 다시 호출됩니다. filters
변수는 하나의 항목 목록을 보유하지만 결과 길이는 2입니다. 반복해서 실행하면 항상 증가합니다. new_filter = Filter()
호출이 이전 메서드 호출에서 new_filter를 반환하는 것과 같습니다. 이런 종류의 행동을 일으키는 원인은 무엇입니까? 나는 new_filter = copy.deepcopy(Filter())
으로 해결할지도 모르지만 그렇게해야만하는 이유는 무엇입니까?
감사 보그 단이 목록은 한 번만 만들어
, 그것은 외부 환경에서 발생해야한다. – agf