如何在另一个函数中使用一个类

Posted

技术标签:

【中文标题】如何在另一个函数中使用一个类【英文标题】:How to use a class in another function 【发布时间】:2022-01-05 21:56:24 【问题描述】:

对课程相当陌生。我正在尝试利用一个类来设置一个目录,然后该目录将用于访问目录中的文件。

import json


class Dir:
    def __init__(self, dir):
        self.dir = dir


def get_currencyid(name, dir: Dir):
    with open(dir + 'currency.json', 'r') as f:
        data = json.load(f)
    currencies = data.keys()
    for effect in currencies:
        if name in data[effect]['name']:
            id = data[effect]['id']
            return id


def get_all_currencies():
    with open('currency.json', 'r') as f:
        data = json.load(f)
    effects = data.keys()
    for effect in effects:
        print("NAME:", data[effect]['name'], ": ID:", data[effect]['id'])


Dir(r"C:\Users\me\AppData\Roaming\Firebot")

get_currencyid("Points")

所以我想设置目录,然后调用 get_currency 函数,该函数将使用 Dir 类中传递的目录。

【问题讨论】:

在您的代码上下文中,作为一个类有什么好处?您在这里存储的只是一个字符串。如果这就是你所做的一切,只需通过那个arround。 “设置目录”是什么意思?类的意义在于它代表一种数据类型。您没有“设置”目录;你创建一个“目录”的对象。从那里,你将它传递给你的函数,就像你传递其他任何东西一样。 如果你是“对类相当陌生”并且不了解如何使用它们做基本的事情,那么你不需要 Stack Overflow - 你需要一个教程。请理解,这不是论坛 【参考方案1】:

我不确定我是否理解正确,但在这里我已尽力修复您的代码。

import json


class Dir:
    def __init__(self, dir):
        self.dir = dir


def get_currencyid(name, dir: Dir):
    with open(dir.dir + 'currency.json', 'r') as f:
        data = json.load(f)
    currencies = data.keys()
    for effect in currencies:
        if name in data[effect]['name']:
            id = data[effect]['id']
            return id


def get_all_currencies():
    with open('currency.json', 'r') as f:
        data = json.load(f)
    effects = data.keys()
    for effect in effects:
        print("NAME:", data[effect]['name'], ": ID:", data[effect]['id'])


directory = Dir(r"C:\Users\me\AppData\Roaming\Firebot")

get_currencyid("Points", directory)

我创建了一个名为 directory 的类的实例。我将目录实例传递给 get_currencyid 函数。然后在 get_currencyid 函数中我改变了

with open(dir + 'currency.json', 'r') as f:
        data = json.load(f)

with open(dir.dir + 'currency.json', 'r') as f:
        data = json.load(f)

因为你需要访问类内部的“dir”实例变量。

【讨论】:

"get_currency_id" 在我看来仍然很狡猾:根据条件,它要么返回一些东西,要么不返回;如果第一次返回从未发生,最好显式返回 None。 我认为它不会自动返回,但你是对的。我会改变的。

以上是关于如何在另一个函数中使用一个类的主要内容,如果未能解决你的问题,请参考以下文章

随机森林分类如何在幕后工作?

java 父类如何在运行期动态获取子类类名

idea java中Jformdesigner自动生成的类如何在public static void main(String[] args)}中引用

MATLAB中如何使用KNN对数据进行分类?

如何在另一个函数中使用嵌套函数作为球拍语言的参数?

如何在另一个类中使用带有构造函数的类?