Один из многих атрибутов python, не переносимых на дочерние элементы в классе GitHub, с поддержкой и без поддержки Django

Когда я создаю подкласс класса GitHubIssues (см. ниже), все дочерние классы имеют ожидаемые атрибуты, за исключением self.repo_object... Когда я заново объявляю его в дочерних классах, он работает так, как должен... но мне не нужно этого делать, если мои знания о наследовании верны.

class GitHubIssues:
    class UnknownRepositoryError(UnknownObjectException):
        ...

    def __init__(self, repo_name: str, github_key_path: str, data: dict = None):
        # TODO: test this as standalone more.
        self.repo_name = repo_name
        self.repo_obj = None
        self._IsDjangoForm = None
        self._GitHubKeyPath = github_key_path
        self._GitHubKey = None
        self._IsInIssues = None

        if not self.IsDjangoForm:
            self.data: dict = data
            self.cleaned_data: dict = self.data
            self.errors: list = []

        self.repo_obj = self.GetRepoObject()
# other attributes omitted for brevity 

    def GetRepoObject(self):
        try:
            g = Github(self.__GitHubKey)
            for repo in g.get_user().get_repos():
                if repo.name == self.repo_name:
                    self.repo_obj = repo
                    return self.repo_obj

        except BadCredentialsException as e:
            self.add_error(None, e)
        except GithubException as e:
            self.add_error(None, e)
        except Exception as e:
            self.add_error(None, e)

        if isinstance(self.repo_obj, Repository.Repository):
            pass
        else:
            try:
                raise self.UnknownRepositoryError(404, data=self.repo_obj, message=f"Could not find {self.repo_name}")
            except self.UnknownRepositoryError as e:
                self.add_error(None, e)

class BugReportForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._issue_added = None

        if kwargs:
            if 'repo_name' in kwargs:
                self.repo_name = kwargs['repo_name']
            else:
                self.repo_name = 'BackflowPreventionValveCatalog'
            if 'GitHubKeyPath' in kwargs:
                self._GitHubKeyPath = kwargs['GitHubKeyPath']
            else:
                self._GitHubKeyPath = #redacted path
        else:
            self.repo_name = 'BackflowPreventionValveCatalog'
            self._GitHubKeyPath = #redacted path

    @property
    def issue_added(self):
        return self._issue_added

    @issue_added.setter
    def issue_added(self, value):
        self._issue_added = value


class BugReportModelForm(BugReportForm, forms.ModelForm):
    def save(self, commit=True):
        self.instance = super().save()
        if self.issue_added:
            pass
        else:
            self.issue_added = False
            self.instance.save()
        return self.instance

    class Meta:
        model = BugReport
        fields = ['Page', 'BugTitle', 'Bug_Description', 'BugType', 'YourName']


class ValveBugReportForm(BugReportForm, GitHubIssues):
    ...


class ValveBugReportModelForm(ValveBugReportForm, BugReportModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # FIXME: why does this need to be redeclared? is it an MRO issue? if this declaration is commented out, the class throws AttributeError: 'ValveBugReportModelForm' object has no attribute 'repo_obj'
        #self.repo_obj = self.GetRepoObject()

    def save(self, commit=True):
        self.instance = super().save()
        # FIXME: there might be some duplication here... self._issue_added
        self.issue_added = self.CreateGitHubIssue()
        if self.issue_added or self.IsInIssues:
            pass
        else:
            self.instance.InIssues = False
            self.instance.save()
        return self.instance

Добавление self.repo_obj = self.GetRepoObject() в подкласс устраняет проблему, но мне не нужно этого делать, если мои знания о python верны?

Вернуться на верх