40_class_ex.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. import c
  86. class A(c.void_p):
  87. pass
  88. a = A(0)
  89. assert repr(a).startswith('<void* at')
  90. if 1:
  91. class TrueClass:
  92. pass
  93. else:
  94. class FalseClass:
  95. pass
  96. assert TrueClass
  97. # staticmethod and classmethod
  98. class A():
  99. dd = 2
  100. def __init__(self):
  101. self.a = 1
  102. @staticmethod
  103. def static_method(txt):
  104. return txt
  105. @classmethod
  106. def class_method(cls, txt):
  107. return cls.__name__ + txt
  108. assert A.static_method(123) == 123
  109. assert A.class_method('123') == 'A123'
  110. assert A().static_method(123) == 123
  111. assert A().class_method('123') == 'A123'
  112. assert A.dd == 2
  113. assert A().dd == 2
  114. class B(A): pass
  115. assert B.dd == 2
  116. assert B().dd == 2
  117. assert B.static_method(123) == 123
  118. assert B.class_method('123') == 'B123'
  119. assert B().static_method(123) == 123
  120. assert B().class_method('123') == 'B123'