Python 我想将函数变量初始化为之前输入的变量

Python 我想将函数变量初始化为之前输入的变量,python,python-3.x,Python,Python 3.x,所以我输入: router=路由器(“a”,图形) 在我的主要职能中。这将获取图形并将其放入此路由器函数中。我希望我的查找功能,我希望开始是我在上面分配的“a”,等等,但我尝试了self.name等,但它不起作用。我怎么修理它 class router(object): def __init__(self,name,Graph): self.name = name self.Graph = Graph def find(self, start=name,

所以我输入:

router=路由器(“a”,图形)

在我的主要职能中。这将获取图形并将其放入此路由器函数中。我希望我的查找功能,我希望开始是我在上面分配的“a”,等等,但我尝试了self.name等,但它不起作用。我怎么修理它

class router(object):
    def __init__(self,name,Graph):
        self.name = name
        self.Graph = Graph

def find(self, start=name, maxD=1e309):

遗憾的是,您无法基于其他参数初始化参数,因此您可以将其初始化为
None
,然后检查它是否为
None

类路由器(对象):
定义初始化(自身、名称、图形):
self.name=名称
self.Graph=Graph
def find(self,start=None,maxD=1e309):
如果“开始”为“无”:
start=self.name
#start现在初始化为self.name
通过

您可以使用
functools.partial
方法预先初始化损坏的名称
\u find
方法并将其存储到
find

from functools import partial

class router(object):
    def __init__(self, name, Graph):
        self.name = name
        self.Graph = Graph
        self.find = partial(self._find, start=name)

    def _find(self, start, maxD=1e309):
        print(start, maxD)


rtr = router('router_name', 'some_graph')
rtr.find()
# Out: router_name inf
rtr.find(start='new_start', maxD=np.pi)
# Out: new_start 3.141592653589793
由于这涉及覆盖关键字参数
开始
,因此强制
\u find
方法仅接受带有
*
-语法的关键字参数是最佳做法:

    def _find(self, *, start, maxD=1e309):
        print(start, maxD)
有关更多信息,请参阅。判决

如果提供了其他关键字参数,它们将扩展并覆盖关键字


是考虑您的问题的重要部分。

a
保存为
self.name
,您可以通过
find
方法访问它。如果您声称自己尝试过,请查看该尝试,并查看我执行此操作时我们是否可以帮助您def shortestpath(图形,start=None,end):“查找图形中的最短路径btw start&end节点”“”\,如果start为None,则将当前距离设置为零:start=self.name pass它返回默认参数后面的非默认参数如果给
start
一个默认值,还必须给
end
一个默认值,由于它位于参数列表中的
start
之后,但在我的函数find(“f”)中,我想将f传递到end,而此时图形和start已经存在,我还需要指定默认值吗?对不起,我对这个很陌生,那么你应该为graph提供一个默认参数,并将第一个参数设为end,并将它们作为关键字参数传递。你应该阅读和。