# HG changeset patch # User Paul Boddie # Date 1481236603 -3600 # Node ID c2bdc5b1a125b68ce87a5d3eae8ff56943d66e08 # Parent 19b30b3612e7eb72e1493a898c04c7b06a3a881a Ensure that base classes provide the attributes they use. Added tests demonstrating the use of attributes in base classes that are not necessarily defined in those classes or in some subclasses. diff -r 19b30b3612e7 -r c2bdc5b1a125 lib/__builtins__/file.py --- a/lib/__builtins__/file.py Thu Dec 08 23:33:14 2016 +0100 +++ b/lib/__builtins__/file.py Thu Dec 08 23:36:43 2016 +0100 @@ -27,7 +27,11 @@ "Generic file-oriented stream functionality." def __init__(self, bufsize=1024): + + "Initialise the stream with the given 'bufsize'." + self.bufsize = bufsize + self.__data__ = None def read(self, n=0): diff -r 19b30b3612e7 -r c2bdc5b1a125 lib/__builtins__/sequence.py --- a/lib/__builtins__/sequence.py Thu Dec 08 23:33:14 2016 +0100 +++ b/lib/__builtins__/sequence.py Thu Dec 08 23:36:43 2016 +0100 @@ -114,6 +114,32 @@ return result + # Methods implemented by subclasses. + + def __setslice__(self, start, end, value): + + "Method to be overridden by subclasses." + + pass + + def __get_single_item__(self, index): + + "Method to be overridden by subclasses." + + return None + + def __set_single_item__(self, index, value): + + "Method to be overridden by subclasses." + + pass + + def __len__(self): + + "Method to be overridden by subclasses." + + return 0 + class sequence(itemaccess): "A common base class for sequence types." @@ -192,6 +218,12 @@ return not self.__eq__(other) + def __iter__(self): + + "Method to be overridden by subclasses." + + raise StopIteration() + def _get_absolute_index(index, length): """ diff -r 19b30b3612e7 -r c2bdc5b1a125 tests/attr_base_usage_bad.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/attr_base_usage_bad.py Thu Dec 08 23:36:43 2016 +0100 @@ -0,0 +1,16 @@ +class C: + def f(self): + return self.x + +class D(C): + pass + +class E(C): + def __init__(self, x): + self.x = x + +d = D() +print d.f() + +e = E(2) +print e.f() diff -r 19b30b3612e7 -r c2bdc5b1a125 tests/attr_base_usage_good.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/attr_base_usage_good.py Thu Dec 08 23:36:43 2016 +0100 @@ -0,0 +1,18 @@ +class C: + def __init__(self): + self.x = 1 + def f(self): + return self.x + +class D(C): + pass + +class E(C): + def __init__(self, x): + self.x = x + +d = D() +print d.f() + +e = E(2) +print e.f()