0

我正在编写一个用于创建较小的 python 模块的库。我不确定我是否应该使用 compile() 而不是 exec(),它当前执行文件(执行全局范围内的任何基本代码)但没有存储为函数中的方法,以后可以通过不同的文件ETC ... . 它将python文件加载为字符串

基本使用示例

from bagel import webImport

MyFile = WebImport("https://WhereFileIsLoaded.py")
# OR Feature Not Added Yet

MyModule = WebImport("https://WhereModuleIsLoaded.zip")

这是代码

import requests
from functools import wraps


# Thank you stack overflow
def withself(f):
    @wraps(f)
    def wrapper(*args, **kwds):
        return f(f, *args, **kwds)
    return wrapper


def webImport( URL: str):
    data = requests.get(URL).text
    
    


    @withself
    def returnFunc(self):
        funcs = {}
        exec(data, {'__builtins__':__builtins__}, funcs)
        print("Executed Data")
        setattr(self, "funcs", funcs)
        return self
    
    # Function Object
    FUNC = returnFunc()

    for func in FUNC.funcs.items():
            # Can go through multipe because self.funcs 
            if not hasattr(FUNC.funcs, str(func[0])):
                print(func[0])
                # Setting the Atribute of this class -> The FUNCTION with the body of the functiion  
                setattr(FUNC, str(func[0]), FUNC.funcs[func])
                # exec(f"FUNC.{func}")

    return FUNC

这是控制台输出,我正在使用 Python IDLE 来测试它。

from webImport import webImport
web = webImport("https://pastebin.com/raw/xDJxwMri")

控制台输出

控制台截图

4

1 回答 1

0

而不是这条线,

setattr(FUNC, str(func[0]), FUNC.funcs[func])

用这个

setattr(FUNC, str(func[0]), FUNC.funcs.get(func[0]))

于 2022-01-08T20:04:03.913 回答