| 858 | self.assertEqual(A.__subclasses__(), subclasses) |
| 859 | |
| 860 | def test_multiple_inheritance(self): |
| 861 | # Testing multiple inheritance... |
| 862 | class C(object): |
| 863 | def __init__(self): |
| 864 | self.__state = 0 |
| 865 | def getstate(self): |
| 866 | return self.__state |
| 867 | def setstate(self, state): |
| 868 | self.__state = state |
| 869 | a = C() |
| 870 | self.assertEqual(a.getstate(), 0) |
| 871 | a.setstate(10) |
| 872 | self.assertEqual(a.getstate(), 10) |
| 873 | class D(dict, C): |
| 874 | def __init__(self): |
| 875 | dict.__init__(self) |
| 876 | C.__init__(self) |
| 877 | d = D() |
| 878 | self.assertEqual(list(d.keys()), []) |
| 879 | d["hello"] = "world" |
| 880 | self.assertEqual(list(d.items()), [("hello", "world")]) |
| 881 | self.assertEqual(d["hello"], "world") |
| 882 | self.assertEqual(d.getstate(), 0) |
| 883 | d.setstate(10) |
| 884 | self.assertEqual(d.getstate(), 10) |
| 885 | self.assertEqual(D.__mro__, (D, dict, C, object)) |
| 886 | |
| 887 | # SF bug #442833 |
| 888 | class Node(object): |
| 889 | def __int__(self): |
| 890 | return int(self.foo()) |
| 891 | def foo(self): |
| 892 | return "23" |
| 893 | class Frag(Node, list): |
| 894 | def foo(self): |
| 895 | return "42" |
| 896 | self.assertEqual(Node().__int__(), 23) |
| 897 | self.assertEqual(int(Node()), 23) |
| 898 | self.assertEqual(Frag().__int__(), 42) |
| 899 | self.assertEqual(int(Frag()), 42) |
| 900 | |
| 901 | def test_diamond_inheritance(self): |
| 902 | # Testing multiple inheritance special cases... |