我一直在尝试验证用户可以在框架样式设置中创建的类。我可以通过以下方式确保子类中存在类属性:
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)
导致: …
我试图弄清楚为什么下面的代码不能编译.
期望的行为是:给定整数向量,找到其最大值并将最大值+ 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) 一些在以前版本的气流中非常有用的模板变量现在已被弃用,取而代之的是更通用的变量。但是,我不确定如何模拟以前的模板变量。例如,如何使用可用的结构(例如{{ds}}或{{data_interval_start }})来创建{{next_ds}}等。
我们可以在这里找到当前和已弃用的气流模板变量。