2014-10-28 1 views
-1
class checkevent: 
def __init__(self,fromuser): 
self.fromuser = fromuser 

def openid_check(self):# use sqlalchemy 
    exist_user = User.query.filter_by(openid = self.fromuser).first() 
    if exist_user is None: 
     text = u'请绑定后在使用' 
     return text 

def grade(self): 
    openid_check() 
    exist_user = User.query.filter_by(openid = self.fromuser).first() 
    geturp = urp(exist_user.username, exist_user.password_urp) #the function 
    return geturp #return the grades as text 
def key_check(self,x): # use dict like switch 
    {'grade': self.grade 
     } 
contents = checkevent('ozvT4jlLObJWzz2JQ9EFsWSkdM9U').key_check('grade') 
print contents 

항상 반환 없음, 값을 얻고 싶습니다 그리고 올바른 방법으로 사용할 수 있습니다?C 스위치와 같은 dict 사용

+0

'def key_check (self, x)'는 아무 것도 반환하지 않습니다. 그래서 당신은 '없음'을 얻습니다. 게다가 함수에서'x'를 사용하지 마십시오. – fredtantini

답변

2

key_check에는 return 문이 없으므로 자연스럽게 아무 것도 반환하지 않습니다. 기본적으로 구현의 마지막 비트가 누락되었습니다. 적절한 함수를 이름별로 검색하면 해당 함수를 호출하고 결과를 반환해야합니다.

def key_check(self, key): # "x" is a meaningless name; use something meaningful 
    lookup = { 
     'grade': self.grade 
    } 
    func = lookup[key] # Look up the correct method 
    return func() # Call that method and return its result 

기술적으로 당신이 할 수있는 온라인 모든 것을 하나 개의 문장에 당신이 정말로 성능이 프리미엄 경우를 제외하고 가독성이 고통으로,하지만 난 그것을 권하고 싶지 않다 싶어합니다.

+0

또 다른 질문으로, 왜 학년 함수에서 openid_check()를 호출 할 수 없으며, { 'grade': grade} 대신 { 'grade': self.grade}와 같이 사용하는 이유는 무엇입니까? – user3149621

+0

'openid_check'와'grade'는 두 * 인스턴스 메소드 *이므로 인스턴스 ('self')에서 호출해야합니다. 그것에 대해 더 궁금한 점이 있으면 온라인에서 사용할 수있는 많은 리소스가있는 완전히 다른 주제입니다 (Google의 "python 인스턴스 방법"). –