reframe icon indicating copy to clipboard operation
reframe copied to clipboard

Inconsistent use of "private" fields in subclasses

Open vkarak opened this issue 7 years ago • 0 comments

Subclasses of RegressionTest are not allowed to use private fields for obvious reasons. However, in several other places of the framework private fields (i.e. fields starting with _) have more the meaning of protected fields. We should figure this out and change the code accordingly. An option could be to treat fields starting with _ as protected and fields starting with __ are really private (which is actually true).

In the following, the _protected attribute can be accessed by subclasses, but the __private one is not accessible and an AttributeError is raised (technically, it can be accessed, but it's hacky and implementation dependent).

class C:
    def __init__(self):
        self._protected = 1
        self.__private = 2

class D(C):
    def __init__(self):
        super().__init__()
        self.a = self._protected
        self.b = self.__private

d = D()

This results to the following:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __init__
AttributeError: 'D' object has no attribute '_D__private'

Internal issue: https://madra.cscs.ch/scs/reframe/issues/474

vkarak avatar Feb 15 '18 08:02 vkarak