Python 扩展一个类而不访问它的_init__方法
我试图从给定的库扩展一个类,但我无法访问该类的Python 扩展一个类而不访问它的_init__方法,python,Python,我试图从给定的库扩展一个类,但我无法访问该类的\uuuu init\uuu,只能访问生成实例的函数。差不多 A类: 通过 def return_an_A(): 返回一个() B(A)类: #如何实例化只有返回A的权限的B def extend_A(): 通过 如何定义类B的实例 谢谢你的帮助 更新 正如我们应该注意到的,我的例子设置得很差,所以我希望这里能更好地解释我的真实问题 我使用的原始代码如下 导入gitlab #这里gl.projects.get(项目名称)是该类的一个实例 #gitl
\uuuu init\uuu
,只能访问生成实例的函数。差不多
A类:
通过
def return_an_A():
返回一个()
B(A)类:
#如何实例化只有返回A的权限的B
def extend_A():
通过
如何定义类B的实例
谢谢你的帮助
更新
正如我们应该注意到的,我的例子设置得很差,所以我希望这里能更好地解释我的真实问题
我使用的原始代码如下
导入gitlab
#这里gl.projects.get(项目名称)是该类的一个实例
#gitlab.v4.objects.Project
def项目(url、专用令牌、项目名称):
使用gitlab.gitlab(url,私有令牌)作为gl:
返回总账.projects.get(项目名称)
#此实现以gitlab.v4.objects.Project为例
def列表文件(项目、提交分支):
当前_文件=[]
如果不是project.empty\u回购:
当前_文件=[
f[“路径”]
对于project.repository_树中的f(
ref=提交分支
)
]
返回当前的\u文件
我想要一个像这样的结构
class MyProject:
#这里缺少像项目函数那样实例化的方法
#我不想将项目实例作为参数传递以使其成为
#属性,我想扩展类项目本身
def列表文件(自我、提交分支):
当前_文件=[]
#注意这里的变量
#可以直接访问gitlab.v4.objects.Project
如果不是self.empty\u repo:
当前_文件=[
f[“路径”]
对于self.repository_树中的f(
ref=提交分支
)
]
返回当前的\u文件
但是我无法找到正确的方法来编写
\uuuu init\uuuu
我通过使用委派模式找到了解决问题的方法
类项目:
def_uuuinit_uuu(self、private_令牌、项目名称、url):
self.private\u令牌=private\u令牌
self.project\u name=项目名称
self.url=url
#未找到所有方法和属性时,将它们委托给子类
#在课堂上
def _ugetattr _;(self,attr):
返回self.\u项目.\u获取属性\u(属性)
@财产
def_项目(自我):
使用gitlab.gitlab(self.url,self.private_令牌)作为gl:
返回总账.projects.get(self.project\u name)
def列表_文件(自身、分支):
当前_文件=[]
如果不是自己的.\u project.empty\u repo:
当前_文件=[
f[“路径”]
对于self.\u project.repository\u树中的f(
ref=branch,recursive=True,all=True
)
如果f[“type”]=“blob”
]
返回当前的\u文件
我通过使用委派模式找到了问题的解决方案
类项目:
def_uuuinit_uuu(self、private_令牌、项目名称、url):
self.private\u令牌=private\u令牌
self.project\u name=项目名称
self.url=url
#未找到所有方法和属性时,将它们委托给子类
#在课堂上
def _ugetattr _;(self,attr):
返回self.\u项目.\u获取属性\u(属性)
@财产
def_项目(自我):
使用gitlab.gitlab(self.url,self.private_令牌)作为gl:
返回总账.projects.get(self.project\u name)
def列表_文件(自身、分支):
当前_文件=[]
如果不是自己的.\u project.empty\u repo:
当前_文件=[
f[“路径”]
对于self.\u project.repository\u树中的f(
ref=branch,recursive=True,all=True
)
如果f[“type”]=“blob”
]
返回当前的\u文件
当你说“我没有访问\uuuuu init\uuuuu
的权限”时,你的意思是“我没有对类的引用”吗?Python缺少“private/public”方法的定义。您始终可以访问/覆盖类A
的\uuuu init\uuuu
方法。然而,你应该更具体地描述A级的形状和你想要达到的目标。这可能会有帮助,因为你完全正确。我的问题设计得不好。我用真实的问题更新了这个问题,希望能让它更清楚。再次感谢!当你说“我没有访问\uuu init\uuu
”时,你的意思是“我没有对类的引用”吗?Python缺少“private/public”方法的定义。您始终可以访问/覆盖类A
的\uuuu init\uuuu
方法。然而,你应该更具体地描述A级的形状和你想要达到的目标。这可能会有帮助,因为你完全正确。我的问题设计得不好。我用真实的问题更新了这个问题,希望能让它更清楚。再次感谢!