2016-08-03 5 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を使用しています注:ソリューションのオブジェクト

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

「外部」にアクセスするにはどうすればよいですか? – dsgdfg

+0

Solutionオブジェクトを渡し、自分の編集をチェックする必要があります – dhdavvie

0

あなたは、単にグローバルなキーワードを使用する必要がありますに合格する必要があります外にそれを渡します。 前へ= Noneはクラスのクラス外で定義されているため、クラス内で同じ変数を使用するには、行を追加します。

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

これはあなたの作業を行います。

関連する問題