41_class_ex.py 3.0 KB

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