gpt4 book ai didi

python - 在 python 中,有什么方法可以在定义类后立即自动运行函数?

转载 作者:行者123 更新时间:2023-12-01 11:07:32 26 4
gpt4 key购买 nike

我正在开发一个类。它需要的类级数据将相对复杂。为了节省打字时间并最大程度地减少错误,我想通过函数定义大量此类数据。另外,即使用户还没有准备好实例化该类,我也想让这些数据可供用户使用。所以,我想知道,有没有办法让这些函数在定义类后立即自动运行?例如,我想要类似的东西

import numpy as np    

def class foo:

@this_should_run_before_instantiation
def define_bar:
bar = np.range(100)

@this_should_also_run_before_init
def define_something_really complicated:
bleh = # something that is too complicated for a single line or lambda

def __init__(self):
# etc.

然后用户可以做类似的事情

>>>from foopackage import foo
>>>foo.bar
array([ 0, 1, 2, 3, 4, 5, ... #etc.
>>>foo.bleh
< whatever bleh is ... >

最佳答案

处理此问题的理智/简单方法是让类的作者明确地执行此操作。所以像这样:

class Foo:
@classmethod # don't have to be but will likely benefit from being classmethods...
def _define_something_really_complicated(cls):
...
@classmethod
def _define_something_else_really_complicated(cls):
...
@classmethod
def _build(cls):
cls._define_something_really_complicated()
cls._define_something_else_really_complicated()
...
def __init__(self):
...

Foo._build() # where your module is defined.

然后每当消费者执行 import foo; my_foo_instance = foo.Foo() 它将已经构建。

您可以创建一个元类来检查类成员的某些标记,它会自动执行此操作,但老实说,以上内容对我和您类的 future 读者来说都非常清楚(最好不要将变量的初始化移动到看似神奇的元类 foo)。

关于python - 在 python 中,有什么方法可以在定义类后立即自动运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com