diff --git a/lldb/examples/python/sbvalue.py b/lldb/examples/python/sbvalue.py
index 59c0b61..6e51299 100755
--- a/lldb/examples/python/sbvalue.py
+++ b/lldb/examples/python/sbvalue.py
@@ -2,6 +2,7 @@
 
 import lldb
 
+
 class value(object):
     '''A class that wraps an lldb.SBValue object and returns an object that
     can be used as an object with attribytes:\n
@@ -24,6 +25,7 @@
     argv.num_children - return the number of children this value has
     argv.children - return a list of sbvalue objects that represents all of the children of this value
     '''
+
     def __init__(self, sbvalue):
         self.sbvalue = sbvalue
 
@@ -37,10 +39,12 @@
         return self.sbvalue.__str__()
 
     def __getitem__(self, key):
-        if type(key) is int:
-            return value(self.sbvalue.GetChildAtIndex(key, lldb.eNoDynamicValues, True))
+        if isinstance(key, int):
+            return value(
+                self.sbvalue.GetChildAtIndex(
+                    key, lldb.eNoDynamicValues, True))
         raise TypeError
-    
+
     def __getattr__(self, name):
         if name == 'name':
             return self.sbvalue.GetName()
@@ -55,15 +59,15 @@
         if name == 'is_pointer':
             return self.sbvalue.TypeIsPointerType()
         if name == 'format':
-            return self.sbvalue.GetFormat ()
+            return self.sbvalue.GetFormat()
         if name == 'value':
-            return self.sbvalue.GetValue ()
+            return self.sbvalue.GetValue()
         if name == 'summary':
-            return self.sbvalue.GetSummary ()
+            return self.sbvalue.GetSummary()
         if name == 'description':
-            return self.sbvalue.GetObjectDescription ()
+            return self.sbvalue.GetObjectDescription()
         if name == 'location':
-            return self.sbvalue.GetLocation ()
+            return self.sbvalue.GetLocation()
         if name == 'target':
             return self.sbvalue.GetTarget()
         if name == 'process':
@@ -75,18 +79,25 @@
         if name == 'num_children':
             return self.sbvalue.GetNumChildren()
         if name == 'children':
-            # Returns an array of sbvalue objects, one for each child of 
+            # Returns an array of sbvalue objects, one for each child of
             # the value for the lldb.SBValue
             children = []
-            for i in range (self.sbvalue.GetNumChildren()):
-                children.append(value(self.sbvalue.GetChildAtIndex(i, lldb.eNoDynamicValues, True)))
+            for i in range(self.sbvalue.GetNumChildren()):
+                children.append(
+                    value(
+                        self.sbvalue.GetChildAtIndex(
+                            i,
+                            lldb.eNoDynamicValues,
+                            True)))
             return children
         raise AttributeError
-    
+
+
 class variable(object):
     '''A class that treats a lldb.SBValue and allows it to be used just as
-    a variable would be in code. So if you have a Point structure variable 
+    a variable would be in code. So if you have a Point structure variable
     in your code, you would be able to do: "pt.x + pt.y"'''
+
     def __init__(self, sbvalue):
         self.sbvalue = sbvalue
 
@@ -101,155 +112,157 @@
 
     def __getitem__(self, key):
         # Allow array access if this value has children...
-        if type(key) is int:
-            return variable(self.sbvalue.GetValueForExpressionPath("[%i]" % key))
+        if isinstance(key, int):
+            return variable(
+                self.sbvalue.GetValueForExpressionPath(
+                    "[%i]" %
+                    key))
         raise TypeError
 
     def __getattr__(self, name):
-        child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
+        child_sbvalue = self.sbvalue.GetChildMemberWithName(name)
         if child_sbvalue:
             return variable(child_sbvalue)
         raise AttributeError
 
     def __add__(self, other):
         return int(self) + int(other)
-        
+
     def __sub__(self, other):
         return int(self) - int(other)
-        
+
     def __mul__(self, other):
         return int(self) * int(other)
-        
+
     def __floordiv__(self, other):
         return int(self) // int(other)
-        
+
     def __mod__(self, other):
         return int(self) % int(other)
-        
+
     def __divmod__(self, other):
         return int(self) % int(other)
-        
+
     def __pow__(self, other):
         return int(self) ** int(other)
-        
+
     def __lshift__(self, other):
         return int(self) << int(other)
-        
+
     def __rshift__(self, other):
         return int(self) >> int(other)
-        
+
     def __and__(self, other):
         return int(self) & int(other)
-        
+
     def __xor__(self, other):
         return int(self) ^ int(other)
-        
+
     def __or__(self, other):
         return int(self) | int(other)
-        
+
     def __div__(self, other):
         return int(self) / int(other)
-        
+
     def __truediv__(self, other):
         return int(self) / int(other)
-        
+
     def __iadd__(self, other):
         result = self.__add__(other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __isub__(self, other):
         result = self.__sub__(other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __imul__(self, other):
         result = self.__mul__(other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __idiv__(self, other):
         result = self.__div__(other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __itruediv__(self, other):
         result = self.__truediv__(other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ifloordiv__(self, other):
-        result =  self.__floordiv__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__floordiv__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __imod__(self, other):
-        result =  self.__and__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__and__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ipow__(self, other):
         result = self.__pow__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ipow__(self, other, modulo):
         result = self.__pow__(self, other, modulo)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ilshift__(self, other):
         result = self.__lshift__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __irshift__(self, other):
-        result =  self.__rshift__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__rshift__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __iand__(self, other):
-        result =  self.__and__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__and__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ixor__(self, other):
-        result =  self.__xor__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__xor__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __ior__(self, other):
-        result =  self.__ior__(self, other)
-        self.sbvalue.SetValueFromCString (str(result))
+        result = self.__ior__(self, other)
+        self.sbvalue.SetValueFromCString(str(result))
         return result
-        
+
     def __neg__(self):
         return -int(self)
-        
+
     def __pos__(self):
         return +int(self)
-        
+
     def __abs__(self):
         return abs(int(self))
-        
+
     def __invert__(self):
         return ~int(self)
-        
+
     def __complex__(self):
-        return complex (int(self))
-        
+        return complex(int(self))
+
     def __int__(self):
         return self.sbvalue.GetValueAsSigned()
-        
+
     def __long__(self):
         return self.sbvalue.GetValueAsSigned()
-        
+
     def __float__(self):
-        return float (self.sbvalue.GetValueAsSigned())
-        
+        return float(self.sbvalue.GetValueAsSigned())
+
     def __oct__(self):
         return '0%o' % self.sbvalue.GetValueAsSigned()
-        
+
     def __hex__(self):
         return '0x%x' % self.sbvalue.GetValueAsSigned()
-    
\ No newline at end of file
