role
должен быть параметром Credential.__init__
, не жестко закодированным, хотя он может иметь значение по умолчанию для базового класса.Подклассы передают требуемую роль непосредственно super().__init__
.(Если есть что-то, что должно иметь роль 'rx'
, это также должен быть подкласс Credential
, а не Credential
.)
class Credential:
def __init__(self, path, platform, role='rx'):
self.role = role
self.username_file = path + platform + ('The role should be the same as AXL role: ' + role)
# class SomethingNeedingRoleRX(Credential):
# def __init__(self, path, platform):
# super().__init__(path, platform, 'rx')
class AXL(Credential):
def __init__(self, path, platform, item):
super().__init__(path, platform, 'r')
self.item = item
def final(self):
return self.username_file + self.item
КомуИграйте лучше с super
, вы можете использовать аргументы только для ключевых слов для __init__
:
class Credential:
def __init__(self, *, path, platform, role='rx', **kwargs):
super().__init__(**kwargs)
self.role = role
self.username_file = path + platform + role
class AXL(Credential):
def __init__(self, *, item, **kwargs):
super().__init__(role='r', **kwargs)
self.item = item
def final(self):
return self.username_file + self.item
reg1 = AXL(path=PATH, platform=PLATFORM, item=ITEM)