首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用超级函数传递参数的方法

使用超级函数传递参数的方法
EN

Stack Overflow用户
提问于 2019-03-25 14:41:01
回答 2查看 73关注 0票数 0

我试图在一个名为getphone的方法下设置一个参数角色=‘r’。它在init下工作正常,使用超级程序,但我不知道如何在另一种方法下完成它

该角色是为正在运行的api设置权限级别。

这段代码起作用了

代码语言:javascript
复制
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类下,我希望将角色=‘r’移到getphone方法下

我试过了,但我不明白为什么我需要设置路径和平台。

代码语言:javascript
复制
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())

沙箱可以找到这里

EN

回答 2

Stack Overflow用户

发布于 2019-03-26 12:47:52

没有一个角色与实例相关联;相反,该角色与实例调用的方法相关联。尝尝这个。

代码语言:javascript
复制
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())
票数 1
EN

Stack Overflow用户

发布于 2019-03-26 13:03:59

super()将允许您访问父类范围。您可以以super().method(args)形式在python3中访问任何方法,使用python 2的格式是super(YourClass,self).method(args)

从OOP的角度来看,对每个方法的父方法调用__init__似乎不正确。在父对象的生存期内,您将重新初始化它。如果您想从父程序中设置角色,只需使用self.role = ...即可。任何关于父级访问self.role的方法都会看到修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55340337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档