diff --git a/kgb/spies.py b/kgb/spies.py
index 16b91851fbcbbc5adb4618baa61dc8ec9bd2d2ec..7f3b2822cc8cee967587c196dc3c9cc822ff03ed 100644
--- a/kgb/spies.py
+++ b/kgb/spies.py
@@ -875,7 +875,15 @@ class FunctionSpy(object):
         if inspect.isclass(owner):
             setattr(owner, name, method)
         else:
-            object.__setattr__(owner, name, method)
+            try:
+                object.__setattr__(owner, name, method)
+            except TypeError as e:
+                if str(e) == "can't apply this __setattr__ to instance object":
+                    # This is likely Python 2.6, or early 2.7, where we can't
+                    # run object.__setattr__ on old-style classes. We have to
+                    # fall back to modifying __dict__. It's not ideal but
+                    # doable.
+                    owner.__dict__[name] = method
 
     def _format_call_args(self, argspec):
         """Format arguments to pass in for forwarding a call.
diff --git a/kgb/tests/test_function_spy.py b/kgb/tests/test_function_spy.py
index 1b3cdcb5afac222f7d1f5b85b0d6c6fe20bb1180..a5fcd91018f6b3c22376ada3bce339c67c223e6e 100644
--- a/kgb/tests/test_function_spy.py
+++ b/kgb/tests/test_function_spy.py
@@ -381,6 +381,17 @@ class FunctionSpyTests(TestCase):
         self.agency.spy_on(source4, call_fake=lambda **kwargs: None)
         source4.unspy()
 
+    def test_construction_with_old_style_class(self):
+        """Testing FunctionSpy with old-style class"""
+        class MyClass:
+            def test_func(self):
+                return 100
+
+        obj = MyClass()
+
+        self.agency.spy_on(obj.test_func, call_fake=lambda obj: 200)
+        self.assertEqual(obj.test_func(), 200)
+
     def test_call_with_fake(self):
         """Testing FunctionSpy calls with call_fake"""
         self.agency.spy_on(something_awesome,
