小编Gui*_*the的帖子

如何在python中验证类属性?

我一直在尝试验证用户可以在框架样式设置中创建的类。我可以通过以下方式确保子类中存在类属性:

from abc import ABC, abstractmethod

class A(ABC):
    @property
    @classmethod
    @abstractmethod
    def s(self):
        raise NotImplementedError

class ClassFromA(A):
    pass


ClassFromA()
Run Code Online (Sandbox Code Playgroud)

这导致以下情况Exception

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class ClassFromA with abstract methods s
Run Code Online (Sandbox Code Playgroud)

我还可以s在创建类时使用装饰器检查类属性的类型,如下所示:

from abc import ABC, abstractmethod

def validate_class_s(cls):
    if not isinstance(cls.s, int):
        raise ValueError("S NOT INT!!!")
    return cls

class A(ABC):
    @property
    @classmethod
    @abstractmethod
    def s(self):
        raise NotImplementedError

@validate_class_s
class ClassFromA(A):
    s = 'a string'
Run Code Online (Sandbox Code Playgroud)

导致: …

python metaclass python-3.x python-object

3
推荐指数
1
解决办法
518
查看次数

表达后不应该借用价值结束吗?

我试图弄清楚为什么下面的代码不能编译.

期望的行为是:给定整数向量,找到其最大值并将最大值+ 1的值推送到同一向量上.

fn main() {
    let mut vector = vec![1, 3, 2];
    let greatest_value;
    { // 1
        let mut gv = &vector[0]; // 2
        for x in &vector {
            if x > gv {
                gv = x;
            }
        }
        greatest_value = gv;
    } // 3
    vector.push(greatest_value + 1);
    println!("O maior é: {}", greatest_value);
}
Run Code Online (Sandbox Code Playgroud)

细腻的部分是类中的push方法Vec需要一个可变的借用来修改自我实例vector.编译器看到我在注释的行中进行了一次不可变借用 // 2:

error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable
  --> src/main.rs:13:5
   |
5 …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
91
查看次数

在 Airflow 模板上编写 next_ds 的首选方法是什么?

一些在以前版本的气流中非常有用的模板变量现在已被弃用,取而代之的是更通用的变量。但是,我不确定如何模拟以前的模板变量。例如,如何使用可用的结构(例如{{ds}}{{data_interval_start }})来创建{{next_ds}}等。

我们可以在这里找到当前和已弃用的气流模板变量。

python jinja2 airflow

2
推荐指数
1
解决办法
4751
查看次数

标签 统计

python ×2

airflow ×1

jinja2 ×1

metaclass ×1

python-3.x ×1

python-object ×1

rust ×1