小编enk*_*tor的帖子

在带有 slot=True 的数据类中使用 super() 时出现类型错误

我有一个带有(某种)getter 方法的数据类。

此代码按预期工作:

from dataclasses import dataclass

@dataclass()
class A:
    def get_data(self):
        # get some values from object's fields
        # do some calculations
        return "a calculated value"

@dataclass()
class B(A):
    def get_data(self):
        data = super().get_data()
        return data + " (modified)"


b = B()

print(b.get_data())  # a calculated value (modified)
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加slots=True,我会得到TypeError

from dataclasses import dataclass

@dataclass(slots=True)
class A:
    def get_data(self):
        return "a calculated value"

@dataclass(slots=True)
class B(A):
    def get_data(self):
        data = super().get_data()
        return data + " (modified)" …
Run Code Online (Sandbox Code Playgroud)

python slots python-dataclasses

9
推荐指数
1
解决办法
98
查看次数

在接口声明中,括号是什么意思?

一个例子:

interface IResourceService {
    (url: string, paramDefaults?: any,
        actions?: any, options?: IResourceOptions): IResourceClass<IResource<any>>;
}
Run Code Online (Sandbox Code Playgroud)

语法(variable: type): Type;是什么意思?我怎样才能实现这个接口?

typescript

8
推荐指数
2
解决办法
1134
查看次数

Visual Studio 2017 状态栏中的这个图标是什么意思?

我在状态栏中看到这些图标:

状态栏

没有工具提示。图标是动画的。
我知道图标2指建造过程。但什么是图标1?有时偶尔会出现,我不明白这是什么意思。

visual-studio

5
推荐指数
1
解决办法
1503
查看次数

GHCi 中的“Prelude”前缀是什么意思?

我刚刚开始学习 Haskell。Prelude 被描述为默认模块:

Prelude:标准模块。Prelude 默认导入到所有 Haskell 模块中

但这并不能解释为什么各种文档在 REPL 中都以“Prelude”作为前缀:

Prelude>
Run Code Online (Sandbox Code Playgroud)

我已经通过 Chocolatey 安装了mingw 版本,并且我的 REPL 显示“ghci”作为前缀,而不是“Prelude”:

GHCi, version 9.2.1: https://www.haskell.org/ghc/  :? for help
ghci>
Run Code Online (Sandbox Code Playgroud)

Prelude 模块已加载:

GHCi, version 9.2.1: https://www.haskell.org/ghc/  :? for help
ghci> :browse! Prelude
-- imported via Prelude
(!!) :: [a] -> Int -> a
($) :: (a -> b) -> a -> b
...
Run Code Online (Sandbox Code Playgroud)

为什么前缀不同?“Prelude”在交互式编译器中意味着什么?

haskell

5
推荐指数
1
解决办法
746
查看次数

严格将字符串解析为枚举的最佳方法是什么?

假设我有一个枚举:

public enum MyEnum
{
    OptionOne = 0,
    OptionTwo = 2,
    OptionThree = 4
}
Run Code Online (Sandbox Code Playgroud)

就像我在C#中如何将字符串转换为枚举一样?问题,我从字符串解析枚举,使用Enum.Parse方法:

public class Enumer
{
    public static MyEnum? ParseEnum(string input)
    {
        try
        {
            return (MyEnum) Enum.Parse(typeof (MyEnum), input);
        }
        catch (ArgumentException)
        {
            return null;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有按预期使用整数,表示为字符串.
我不希望Parse.Enum()从字符串转换int,但实际上它.
一个简单的测试:

[TestClass]
public class Tester
{
    [TestMethod]
    public void TestEnum()
    {
        Assert.AreEqual(MyEnum.OptionTwo, Enumer.ParseEnum("OptionTwo"));
        Assert.IsNull(Enumer.ParseEnum("WrongString"));
        Assert.IsNull(Enumer.ParseEnum("2")); // returns 2 instead of null
        Assert.IsNull(Enumer.ParseEnum("12345")); // returns 12345 instead of null
    }
}
Run Code Online (Sandbox Code Playgroud)

只能通过两次四次检查.
Enumer.ParseEnum("2") …

c# enums

4
推荐指数
1
解决办法
698
查看次数

Subject <T>和ReplaySubject <T>之间的主要区别是什么?

System.Reactive.Subjects.Subject<T>System.Reactive.Subjects.ReplaySubject<T>课程有什么区别?

一个不是从另一个派生的,但它们具有相同的描述并在MSDN中实现相同的接口.

c# system.reactive

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

如何将表达式传递给LINQ查询?

我可以将Expression传递给LINQ Select()方法:

public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
    return DbSet.Where(t => t.id < limit).Select(selector)
}
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ样式的查询来做同样的事情?

public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
    var result = from t in DbSet
                 where t.id < limit
                 select selector(t) // doesn't work
    return result
}
Run Code Online (Sandbox Code Playgroud)

c# linq

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

为什么 slot=True 使数据类忽略其默认值?

此代码按预期工作:

from dataclasses import dataclass

@dataclass(slots=False, init=False)
class Test:
    field: str = "default value"


print(Test())  # outputs "Test(field='default value')"
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改slotsTrue,它会抛出 AttributeError:

AttributeError: 'Test' object has no attribute 'field'
Run Code Online (Sandbox Code Playgroud)

要解决此问题,我必须使用生成的__init__方法或显式初始化自定义方法中的所有字段__init__。这种行为背后的原因是什么?

python slots python-dataclasses

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

如何通过管道正确展开数组?

PS 在数组通过管道时“展开”数组。
我想使用以下测试脚本来测试它:

$a = @("a", "b", "c")
$a | Write-Host
Run Code Online (Sandbox Code Playgroud)

在这种情况下,$a数组正确展开:

a
b
c
Run Code Online (Sandbox Code Playgroud)

但是,当我使用自己的函数时

Function Do-Something([Parameter(ValueFromPipeline)] $str) {
    Write-Host $str
}

$a | Do-Something
Run Code Online (Sandbox Code Playgroud)

输出是:

c
Run Code Online (Sandbox Code Playgroud)

如何在自定义函数中通过管道正确处理数组元素?

powershell

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