41_class_ex.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. class A:
  2. def __init__(self, a, b):
  3. self.a = a
  4. self.b = b
  5. def add(self):
  6. return self.a + self.b
  7. def sub(self):
  8. return self.a - self.b
  9. a = A(1, 2)
  10. assert a.add() == 3
  11. assert a.sub() == -1
  12. assert A.__base__ is object
  13. class B(A):
  14. def __init__(self, a, b, c):
  15. super().__init__(a, b)
  16. self.c = c
  17. def add(self):
  18. return self.a + self.b + self.c
  19. def sub(self):
  20. return self.a - self.b - self.c
  21. assert B.__base__ is A
  22. b = B(1, 2, 3)
  23. assert b.add() == 6
  24. assert b.sub() == -4
  25. class C(B):
  26. def __init__(self, a, b, c, d):
  27. super().__init__(a, b, c)
  28. self.d = d
  29. def add(self):
  30. return self.a + self.b + self.c + self.d
  31. def sub(self):
  32. return self.a - self.b - self.c - self.d
  33. assert C.__base__ is B
  34. c = C(1, 2, 3, 4)
  35. assert c.add() == 10
  36. assert c.sub() == -8
  37. class D(C):
  38. def __init__(self, a, b, c, d, e):
  39. super().__init__(a, b, c, d)
  40. self.e = e
  41. def add(self):
  42. return super().add() + self.e
  43. def sub(self):
  44. return super().sub() - self.e
  45. assert D.__base__ is C
  46. d = D(1, 2, 3, 4, 5)
  47. assert d.add() == 15
  48. assert d.sub() == -13
  49. assert isinstance(1, int)
  50. assert isinstance(1, object)
  51. assert isinstance(C, type)
  52. assert isinstance(C, object)
  53. assert isinstance(d, object)
  54. assert isinstance(d, C)
  55. assert isinstance(d, B)
  56. assert isinstance(d, A)
  57. assert isinstance(object, object)
  58. assert isinstance(type, object)
  59. assert isinstance(1, (float, int))
  60. assert isinstance(1, (float, object))
  61. assert not isinstance(1, (float, str))
  62. assert isinstance(object, (int, type, float))
  63. assert not isinstance(object, (int, float, str))
  64. try:
  65. isinstance(1, (1, 2))
  66. exit(1)
  67. except TypeError:
  68. pass
  69. try:
  70. isinstance(1, 1)
  71. exit(1)
  72. except TypeError:
  73. pass
  74. class A:
  75. a = 1
  76. b = 2
  77. assert A.a == 1
  78. assert A.b == 2
  79. class B(A):
  80. b = 3
  81. c = 4
  82. # assert B.a == 1 ...bug here
  83. assert B.b == 3
  84. assert B.c == 4
  85. if 1:
  86. class TrueClass:
  87. pass
  88. else:
  89. class FalseClass:
  90. pass
  91. assert TrueClass
  92. # staticmethod and classmethod
  93. class A():
  94. dd = 2
  95. def __init__(self):
  96. self.a = 1
  97. @staticmethod
  98. def static_method(txt):
  99. return txt
  100. @classmethod
  101. def class_method(cls, txt):
  102. return cls.__name__ + txt
  103. assert A.static_method(123) == 123
  104. assert A.class_method('123') == 'A123'
  105. assert A().static_method(123) == 123
  106. assert A().class_method('123') == 'A123'
  107. assert A.dd == 2
  108. assert A().dd == 2
  109. class B(A): pass
  110. assert B.dd == 2
  111. assert B().dd == 2
  112. assert B.static_method(123) == 123
  113. assert B.class_method('123') == 'B123'
  114. assert B().static_method(123) == 123
  115. assert B().class_method('123') == 'B123'