Передача аргумента из метода с использованием супер - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь установить аргумент role = 'r' в методе getphone. Он работает нормально при init с использованием super, но я не могу понять, как это сделать при другом методе

Роль - установить уровень разрешений для API, который работает

этот код работает

PATH = 'home_drive_'
PLATFORM = 'Linux_'
ITEM = '_PC'

class Credential:
    def __init__(self, *, path, platform, role='', **kwargs):
        super().__init__(**kwargs)
        self.role = role
        self.username_file = path + platform + role


class AXL(Credential):
    def __init__(self, *, item, **kwargs):
        super().__init__(role='rw', **kwargs)
        self.item = item

    def getphone(self):
        self.role = 'r'
        return self.username_file + self.item

    def writephone(self):
        self.role = 'rw'
        return self.username_file + self.item

    def statusphone(self):
        self.role = 'rwx'
        return self.username_file + self.item

reg1 = AXL(path=PATH, platform=PLATFORM, item=ITEM)

print(reg1.getphone())
print(reg1.writephone())
print(reg1.statusphone())

в классе AXL, я хочу переместить role = 'r' в метод getphone

Я пробовал это, и это работает, но я не понимаю, почему мне нужно указать путь и платформу.

PATH = 'home_drive_'
PLATFORM = 'Linux_'
ITEM = '_PC'

class Credential:
    def __init__(self, *, path, platform, role='', **kwargs):
        super().__init__(**kwargs)
        self.role = role
        self.username_file = path + platform + role


class AXL(Credential):
    def __init__(self, *, item, **kwargs):
        super().__init__(**kwargs)
        self.item = item

    def getphone(self):
        super().__init__(path=PATH, platform=PLATFORM, role='r')
        return self.username_file + self.item

    def writephone(self):
        super().__init__(path=PATH, platform=PLATFORM, role='rw')
        return self.username_file + self.item

    def statusphone(self):
        super().__init__(path=PATH, platform=PLATFORM, role='rwx')
        return self.username_file + self.item


reg1 = AXL(path=PATH, platform=PLATFORM, item=ITEM)
print(reg1.getphone())
print(reg1.writephone())
print(reg1.statusphone())

песочницу можно найти здесь

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Нет одной роли, связанной с экземпляром;скорее, роль связана с методом , называемым экземпляром.Попробуйте это.

PATH = 'home_drive_'
PLATFORM = 'Linux_'
ITEM = '_PC'

class Credential:
    def __init__(self, *, path, platform, **kwargs):
        super().__init__(**kwargs)
        self.username_file = path + platform


class AXL(Credential):
    def __init__(self, *, item, **kwargs):
        super().__init__(**kwargs)
        self.item = item

    # "Private" method used to implement the other phone methods
    # You could inline this if you want.
    def _phone(self, role):
        return self.username_file + role + self.item

    def getphone(self):
        return self._phone('r')

    def writephone(self):
        return self._phone('rw')

    def statusphone(self):
        return self._phone('rwx')

reg1 = AXL(path=PATH, platform=PLATFORM, item=ITEM)

print(reg1.getphone())
print(reg1.writephone())
print(reg1.statusphone())
0 голосов
/ 26 марта 2019

super() позволит вам получить доступ к области родительского класса.Вы можете получить к нему доступ из любого метода в форме super().method(args) в python3, а в python 2 формат будет super(YourClass,self).method(args).

Вызов __init__ для родителя для каждого метода не кажется правильным изперспектива ООП.Вы повторно инициализируете родительский объект в течение срока его службы.Если вы хотите установить роль от родителя, вы можете просто использовать self.role = ....Любой метод доступа родителей к self.role увидит модификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...