【发布时间】:2019-03-25 14:41:01
【问题描述】:
我正在尝试在名为 getphone 的方法下设置参数 role='r'。在 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())
可以找到沙盒here
【问题讨论】:
-
如果我理解正确,你可以在
AXL.final里面设置self.role = 'r'。 -
如果我理解正确的话,你不能(至少不能以任何符合约定且易于调试的方式)。
role是初始化Credential实例所必需的,因此必须在初始化AXL实例时提供。 -
不清楚你的最终目标是什么。您想用调用时使用给定角色计算值的方法替换属性
username_file(当前在__init__中初始化)吗? (这会将role从实例的属性转换为简单的final的参数。) -
例如,我会有 AXL.getphone、AXL.writephone 和 AXL.statusphone。 getphone 的角色是只读的 (r) writephone 的角色是读/写 (rw) statusphone 的角色是读/写/执行 (rwx) 根据角色,凭据将返回要使用的用户名/密码 谢谢
-
@chepner,这就是我想做的repl.it/@louis_philippedescamps/…
标签: python oop superclass