pocketpy/tests/41_class_ex.py
blueloveTH 9c173fdada ...
2024-08-04 20:38:49 +08:00

157 lines
2.8 KiB
Python

class A:
def __init__(self, a, __b):
self.a = a
self.__b = __b
@property
def b(self):
return self.__b
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
a = A(1, 2)
assert a.add() == 3
assert a.sub() == -1
assert A.__base__ is object
class B(A):
def __init__(self, a, b, c):
super().__init__(a, b)
self.c = c
def add(self):
return self.a + self.b + self.c
def sub(self):
return self.a - self.b - self.c
assert B.__base__ is A
b = B(1, 2, 3)
assert b.add() == 6
assert b.sub() == -4
class C(B):
def __init__(self, a, b, c, d):
super().__init__(a, b, c)
self.d = d
def add(self):
return self.a + self.b + self.c + self.d
def sub(self):
return self.a - self.b - self.c - self.d
assert C.__base__ is B
c = C(1, 2, 3, 4)
assert c.add() == 10
assert c.sub() == -8
class D(C):
def __init__(self, a, b, c, d, e):
super().__init__(a, b, c, d)
self.e = e
def add(self):
return super().add() + self.e
def sub(self):
return super().sub() - self.e
assert D.__base__ is C
d = D(1, 2, 3, 4, 5)
assert d.add() == 15
assert d.sub() == -13
assert isinstance(1, int)
assert isinstance(1, object)
assert isinstance(C, type)
assert isinstance(C, object)
assert isinstance(d, object)
assert isinstance(d, C)
assert isinstance(d, B)
assert isinstance(d, A)
assert isinstance(object, object)
assert isinstance(type, object)
assert isinstance(1, (float, int))
assert isinstance(1, (float, object))
assert not isinstance(1, (float, str))
assert isinstance(object, (int, type, float))
assert not isinstance(object, (int, float, str))
try:
isinstance(1, (1, 2))
exit(1)
except TypeError:
pass
try:
isinstance(1, 1)
exit(1)
except TypeError:
pass
class A:
a = 1
b = 2
assert A.a == 1
assert A.b == 2
class B(A):
b = 3
c = 4
# assert B.a == 1 ...bug here
assert B.b == 3
assert B.c == 4
if 1:
class TrueClass:
pass
else:
class FalseClass:
pass
assert TrueClass
# staticmethod and classmethod
class A():
dd = 2
def __init__(self):
self.a = 1
@staticmethod
def static_method(txt):
return txt
@classmethod
def class_method(cls, txt):
return cls.__name__ + txt
assert A.static_method(123) == 123
assert A.class_method('123') == 'A123'
assert A().static_method(123) == 123
assert A().class_method('123') == 'A123'
assert A.dd == 2
assert A().dd == 2
class B(A): pass
assert B.dd == 2
assert B().dd == 2
assert B.static_method(123) == 123
assert B.class_method('123') == 'B123'
assert B().static_method(123) == 123
assert B().class_method('123') == 'B123'