2011-07-28 2 views
6

때때로 괄호를 추가하지 않고 메소드와 속성을 이름으로 구별하기가 어렵습니다. 예를 들어파이썬에서 메소드와 속성을 이름으로 구별하는 방법

:
거기 keys() 방법 xml.etree.ElementTree.Element 클래스 text 속성.

text : 텍스트 속성은 요소와 관련된 추가 데이터를 저장하는 데 사용할 수 있습니다.

keys() : 요소 속성 이름을 목록으로 반환합니다.


text 속성 수 있도록 몇 가지 기본 규칙/규칙이 존재하지만, keys()하는 방법?

text()을 방법으로 지정하면 keys입니다. 여전히 괜찮은 것 같습니다.

+0

확인하는 방법입니다, 떨어져 두 개의 구별하는 방법에 대해

을 얘기하면 경우 기능으로 텍스트를, 속성으로 키로 개체를 만듭니다. name이 함수인지 var인지를 즉시 확인해야하는 경우 callable, type 및 isintance 메소드를 사용할 수 있습니다. 이 방법에 대한 자세한 내용은 http://diveintopython.org/power_of_introspection/built_in_functions.html –

+0

"기본 규칙/규칙이 있습니까?"를 참조하십시오. 예. 인용 한 문서는 원하는 정보를 제공합니다. 당신이 이미 발견 한 것이 더 무엇이 필요합니까? –

답변

6

실제로 구분할 수있는 것은 하나만 호출 할 수 있고 하나는 호출 할 수 없다는 것입니다. 따라서 내장 함수 callable()을 실제 개체 (이름이있는 문자열 아님)와 함께 사용하여 호출 가능 여부를 결정할 수 있습니다. 귀하의 경우에는

:

>>> from xml.etree import ElementTree 
>>> elt = ElementTree.Element("") 
>>> callable(elt.keys) 
True 
>>> callable(elt.text) 
False 
+0

어쩌면 내가 다른 방식으로 해석했지만 어쨌든 kev가 묻는 질문은 noarg 메소드와 속성이 기본적으로 같은 일을하기 때문에 어떻게 작성했는지 기억 하는가? 왜냐하면 당신은 호출 구문을 혼합 할 수 없기 때문입니다. – Owen

+0

@Owen. 나는 프로그램을 쓰는 것이 무엇인지 기억해야한다. 나는 종종 오류가 발생할 때까지 그들을 섞는다. 고통 스럽다. – kev

+0

네, 동일한 문제가 있습니다 (비록 스칼라에서). 나는 좋은 해결책을 모른다. – Owen

2

당신이 명명 규칙에 대해 얘기하고 있다면, 파이썬에서 모두 일반적으로 소문자입니다. 당신은

from collections import Callable, Container 
if isinstance(attribute, Callable): 
    return attribute() 
elif isinstance(attribute, str): 
    return attribute 
elif isinstance(attribute, Container): 
    return 'Yes' if 'Blah' in attribute 
else: 
    return str(attribute) 

변수가 객체의 특정 유형에 놓고 경우에 당신은 내가 그것을 확인이라고 생각

관련 문제