2016-08-03 4 views
1

код Java работает, а код python - нет, почему? Как получить доступ к глобальной переменной внутри класса в Python?Как использовать глобальную переменную в классе python?

Python код:

Definition for a binary tree node. 
    class TreeNode(object): 
     def __init__(self, x): 
      self.val = x 
      self.left = None 
      self.right = None 

previous = None 
class Solution(object): 
    def isValidBST(self, root): 
     """ 
     :type root: TreeNode 
     :rtype: bool 
     """ 
     if not root: 
      return True 
     if not self.isValidBST(root.left): 
      return False 
     if previous!=None and previous >= root.val: 
      return False 
     previous = root.val 
     return self.isValidBST(root.right) 

Line 20: UnboundLocalError: local variable 'previous' referenced before assignment.

Java код:

public class Solution { 
     private Integer previous = null; 
     public boolean isValidBST(TreeNode root) { 
      if(root == null){ 
       return true; 
      } 
      if(!isValidBST(root.left)){ 
       return false; 
      } 
      if(previous != null && previous>=root.val){ 
       return false; 
      } 
      previous = root.val; 
      return isValidBST(root.right); 
     } 
    } 

ответ

0

Попробуйте вместо этого:

class Solution(object): 
     previous = None 
     def isValidBST(self, root): 
      """ 
      :type root: TreeNode 
      :rtype: bool 
      """ 
      if not root: 
       return True 
      if not self.isValidBST(root.left): 
       return False 
      if self.previous!=None and self.previous >= root.val: 
       return False 
      self.previous = root.val 
      return self.isValidBST(root.right) 

Обратите внимание previous теперь внутри класса, и использует self.previous для доступа к нему

Edit: Для того, чтобы передать его снаружи вам необходимо будет пройти Решение объекта

solution = Solution() 
#perform something to assign a previous node 

test = Test() 

test.getPrev(solution) 

class Test(object): 
    def getPrev(self, solution): 
     print solution.previous 
+0

Как получить доступ к нему на 'outside'? – dsgdfg

+0

Вам необходимо передать объект Solution, проверить мое редактирование – dhdavvie

0

Вы должны просто использовать глобальное ключевое слово. Как и раньше = None определяется вне класса Solution, поэтому для использования той же переменной внутри класса добавьте строку.

global previous 
if previous!=None and previous >= root.val: 
    your logic 

это сделаете вашу работу.

Смежные вопросы