当我定义一个类时,如何在其方法的签名中包含必须属于同一类的参数?我正在构建一个应该像这样工作的图形结构,但这里是一个简化的示例:
class Dummy:
def __init__(self, value: int, previous: Dummy=None):
self._value = value
self._previous = previous
@property
def value(self):
return self._value
def plus_previous(self):
return self.value + self._previous.value
d1 = Dummy(7)
d2 = Dummy(3, d1)
d2.plus_previous()
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
NameError: name 'Dummy' is not defined
Run Code Online (Sandbox Code Playgroud)
我的意思是,我可以用 Python 2 的方式来做,但我希望有一个比这更多的 python-3-ic 解决方案:
class Dummy:
def __init__(self, value: int, previous=None):
assert type(previous) is Dummy or previous is None
...
Run Code Online (Sandbox Code Playgroud) 我有以下设置:
在 Postgres (Aurora) 中,我设置了一个物化视图。由于仅允许视图的所有者刷新它,因此我还创建了以下函数以允许其他用户刷新它:
CREATE OR REPLACE FUNCTION refresh_views()
RETURNS void
SECURITY DEFINER
AS
$$
BEGIN
REFRESH MATERIALIZED VIEW my_schema.my_view with data;
RETURN;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
当我转到 SQL 终端并运行以下行时,视图将按预期刷新:
SELECT refresh_views();
Run Code Online (Sandbox Code Playgroud)
我们将 Python 与 SQLAlchemy/Pandas 结合使用,并且在大多数情况下运行得非常好。但是,我似乎无法从 Python 中使其正常工作。下面的两个版本都运行没有问题,并且花费的时间大致相同(约 1 分钟),但此后视图不会更新。
cxn.execute(text("SELECT refresh_views();"))
pd.read_sql(text("SELECT refresh_views();"), cxn)
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用吗?