Sorry for resurrecting this old discussion. Just for the record, thanks to a comment by @jnothman in another discussion, I just realized that raising AttributeError works as expected when using a property:
```python
class FakeSVC(object):

    def __init__(self, probas=False):
        self.probas = probas

    @property
    def predict_proba(self):
        def _predict_proba(X):
            return 0
        if self.probas:
            return _predict_proba
        else:
            raise AttributeError

clf = FakeSVC(probas=True)
print hasattr(clf, "predict_proba") # True
print clf.predict_proba([]) # 0

clf = FakeSVC(probas=False)
print hasattr(clf, "predict_proba") # False
```

Using this trick in `SVC` could simplify code that checks for predict_proba elsewhere.