500_reflection.py 981 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. assert type(1) is int
  2. assert type(1.0) is float
  3. assert type(object) is type
  4. assert type(type) is type
  5. assert hasattr(object, '__base__')
  6. assert hasattr(1, '__add__')
  7. assert hasattr(int, '__add__')
  8. assert type(1).__add__(1, 2) == 3
  9. assert getattr(1, '__add__')(2) == 3
  10. a = object()
  11. setattr(a, 'b', 1)
  12. assert a.b == 1
  13. assert hasattr(a, 'b')
  14. assert getattr(a, 'b') == 1
  15. assert getattr(a, 'c', ...) == ...
  16. delattr(a, 'b')
  17. assert not hasattr(a, 'b')
  18. try:
  19. getattr(a, 'xxx')
  20. exit(1)
  21. except AttributeError:
  22. pass
  23. assert getattr(a, 'xxx', 1) == 1
  24. class A:
  25. def __init__(self, x):
  26. self.x = x
  27. def __getattr__(self, name):
  28. if not name:
  29. raise AttributeError
  30. return name, None
  31. a = A(1)
  32. assert a.x == 1
  33. assert a.y == ('y', None)
  34. assert a.zzz == ('zzz', None)
  35. assert getattr(a, 'x') == 1
  36. assert getattr(a, 'zzz') == ('zzz', None)
  37. assert hasattr(a, 'x')
  38. assert hasattr(a, 'y')
  39. assert hasattr(a, 'zzz')
  40. assert not hasattr(a, '')