You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将构造的inv变量传入同类parse_inventory函数,求解决方法

问题:无法将构造的变量inv传递给同类中的另一个函数

我在第6行通过teamInventory.parse_inventory(inv)传递参数,但未被parse_inventory函数接收,报错提示缺少必要的位置参数。请问如何正确将inv传入parse_inventory()?

原代码

class teamInventory:
    def clone_repo(self):
        self.team_dev = "dev0"
        for team_cluster in self.preprod_clusters:
            inv=str(local_repo_path)+self.team_dev+"/hosts.ini"
            teamInventory.parse_inventory(inv)
        return self

    def repo_checkout(self):
        try:
            local_repo_path.exists() and local_repo_path.is_dir()
            teamInventory.clone_repo(self)
        except OSError as e:
            print("Error %s : %s" % (local_repo_path, e.strerror))
        return self

    def parse_inventory(self, cluster_inv):
        self.server = "team"
        cro = teamInventory().clone_repo()
        if cro.team_dev in cluster_inv:
            print("dev cluster inventory")
        return self
avi.repo_checkout()

错误输出

TypeError: parse_inventory() missing 1 required positional argument: 'cluster_inv'

预期输出

dev cluster inventory

解决方法

问题原因

你用类名直接调用实例方法时,没有手动传入实例对象(self),而实例方法的第一个参数必须是实例本身。比如teamInventory.parse_inventory(inv)只传了inv,但方法需要先接收self,再接收cluster_inv,所以报错缺少参数。

具体修改步骤

  1. 调用实例方法用self替代类名:

    • 在clone_repo方法中,把teamInventory.parse_inventory(inv)改成self.parse_inventory(inv),self会自动作为第一个参数传入方法。
    • 在repo_checkout方法中,把teamInventory.clone_repo(self)改成self.clone_repo(),这是实例方法的标准调用方式。
  2. 修正parse_inventory的逻辑冗余:
    方法里新建teamInventory()实例完全没必要,直接用当前实例的self.team_dev即可,避免创建不必要的对象。

修改后的代码

class teamInventory:
    def clone_repo(self):
        self.team_dev = "dev0"
        # 注意:需确保self.preprod_clusters已初始化,否则会报错
        for team_cluster in self.preprod_clusters:
            inv = str(local_repo_path) + self.team_dev + "/hosts.ini"
            # 用self调用实例方法
            self.parse_inventory(inv)
        return self

    def repo_checkout(self):
        try:
            if local_repo_path.exists() and local_repo_path.is_dir():
                # 用self调用实例方法
                self.clone_repo()
        except OSError as e:
            print("Error %s : %s" % (local_repo_path, e.strerror))
        return self

    def parse_inventory(self, cluster_inv):
        self.server = "team"
        # 直接使用当前实例的team_dev,无需新建实例
        if self.team_dev in cluster_inv:
            print("dev cluster inventory")
        return self

# 注意:需确保avi是teamInventory类的实例,比如avi = teamInventory()
avi.repo_checkout()

额外注意点

  • 要确保local_repo_path、self.preprod_clusters以及avi实例已正确初始化,否则会出现其他报错。
  • 实例方法的标准调用方式是self.方法名(参数),只有类方法(用@classmethod装饰)才用类名调用。

内容的提问来源于stack exchange,提问作者AhmFM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:55:33