Blame tests/run/__getattribute__.pyx
|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
# __getattribute__ and __getattr__ special methods for a single class.
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef class just_getattribute:
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> a = just_getattribute()
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
1
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
2
|
|
Packit |
562c7a |
>>> a.bar
|
|
Packit |
562c7a |
'bar'
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
4
|
|
Packit |
562c7a |
>>> a.invalid
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
AttributeError
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
6
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef readonly int called
|
|
Packit |
562c7a |
def __getattribute__(self,n):
|
|
Packit |
562c7a |
self.called += 1
|
|
Packit |
562c7a |
if n == 'bar':
|
|
Packit |
562c7a |
return n
|
|
Packit |
562c7a |
elif n == 'called':
|
|
Packit |
562c7a |
return self.called
|
|
Packit |
562c7a |
else:
|
|
Packit |
562c7a |
raise AttributeError
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef class just_getattr:
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> a = just_getattr()
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
0
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
0
|
|
Packit |
562c7a |
>>> a.foo
|
|
Packit |
562c7a |
10
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
0
|
|
Packit |
562c7a |
>>> a.bar
|
|
Packit |
562c7a |
'bar'
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
1
|
|
Packit |
562c7a |
>>> a.invalid
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
AttributeError
|
|
Packit |
562c7a |
>>> a.called
|
|
Packit |
562c7a |
2
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef readonly int called
|
|
Packit |
562c7a |
cdef readonly int foo
|
|
Packit |
562c7a |
def __init__(self):
|
|
Packit |
562c7a |
self.foo = 10
|
|
Packit |
562c7a |
def __getattr__(self,n):
|
|
Packit |
562c7a |
self.called += 1
|
|
Packit |
562c7a |
if n == 'bar':
|
|
Packit |
562c7a |
return n
|
|
Packit |
562c7a |
else:
|
|
Packit |
562c7a |
raise AttributeError
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef class both:
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> a = both()
|
|
Packit |
562c7a |
>>> (a.called_getattr, a.called_getattribute)
|
|
Packit |
562c7a |
(0, 2)
|
|
Packit |
562c7a |
>>> a.foo
|
|
Packit |
562c7a |
10
|
|
Packit |
562c7a |
>>> (a.called_getattr, a.called_getattribute)
|
|
Packit |
562c7a |
(0, 5)
|
|
Packit |
562c7a |
>>> a.bar
|
|
Packit |
562c7a |
'bar'
|
|
Packit |
562c7a |
>>> (a.called_getattr, a.called_getattribute)
|
|
Packit |
562c7a |
(1, 8)
|
|
Packit |
562c7a |
>>> a.invalid
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
AttributeError
|
|
Packit |
562c7a |
>>> (a.called_getattr, a.called_getattribute)
|
|
Packit |
562c7a |
(2, 11)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef readonly int called_getattribute
|
|
Packit |
562c7a |
cdef readonly int called_getattr
|
|
Packit |
562c7a |
cdef readonly int foo
|
|
Packit |
562c7a |
def __init__(self):
|
|
Packit |
562c7a |
self.foo = 10
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def __getattribute__(self,n):
|
|
Packit |
562c7a |
self.called_getattribute += 1
|
|
Packit |
562c7a |
if n == 'foo':
|
|
Packit |
562c7a |
return self.foo
|
|
Packit |
562c7a |
elif n == 'called_getattribute':
|
|
Packit |
562c7a |
return self.called_getattribute
|
|
Packit |
562c7a |
elif n == 'called_getattr':
|
|
Packit |
562c7a |
return self.called_getattr
|
|
Packit |
562c7a |
else:
|
|
Packit |
562c7a |
raise AttributeError
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def __getattr__(self,n):
|
|
Packit |
562c7a |
self.called_getattr += 1
|
|
Packit |
562c7a |
if n == 'bar':
|
|
Packit |
562c7a |
return n
|
|
Packit |
562c7a |
else:
|
|
Packit |
562c7a |
raise AttributeError
|