Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展一个类而不访问它的_init__方法_Python - Fatal编程技术网

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级的形状和你想要达到的目标。这可能会有帮助,因为你完全正确。我的问题设计得不好。我用真实的问题更新了这个问题,希望能让它更清楚。再次感谢!