Что может быть лучшей идеей в вашем случае - это внедрение зависимостей и инверсия управления. Идея состоит в том, чтобы создать еще один класс со всеми настройками, которые вы анализируете из всех этих различных источников. Затем подклассы могут определить метод для его фактического анализа. Затем, когда вы создаете экземпляр класса, передайте ему экземпляр класса параметров:
class Settings(object):
var1 = None
var2 = None
var3 = None
def configure_superduper(self, superduper):
superduper.var1 = self.var1
# etc
class FromString(Settings):
def __init__(self, string):
#parse strings and set var1, etc.
class SuperDuper(object):
def __init__(self, settings): # dependency injection
settings.configure_superduper(self) # inversion of control
# other initialization stuff
sup = SuperDuper(object, FromString(some_string))
Делать это таким образом имеет то преимущество, что следует более тесно придерживаться принципа единой ответственности, который гласит, что у класса должна быть только одна (вероятная) причина для изменения. Если вы измените способ хранения любой из этих строк, то класс должен измениться. Здесь мы выделяем это в один простой отдельный класс для каждого источника данных.
Если, с другой стороны, вы думаете, что данные, которые хранятся, с большей вероятностью изменятся, чем то, как они хранятся, вы можете использовать методы класса, как предлагает Игнасио, потому что это (немного) сложнее и в этом случае вам не очень дорого, потому что, когда это произойдет, вам придется поменять два класса в этой схеме. Конечно, это тоже не очень больно, потому что вам нужно всего лишь изменить еще одно назначение.