小编far*_*ven的帖子

扩展冻结数据类并从基类实例中获取所有数据

假设我们有一个来自图书馆的类,

@dataclass(frozen=True)
class Dog:
    name: str
    blabla : int
    # lot of parameters
    # ...
    whatever: InitVar[Sequence[str]]
Run Code Online (Sandbox Code Playgroud)

我有一个来自外部库的狗构造函数。

pluto = dog_factory() # returns a Dog object
Run Code Online (Sandbox Code Playgroud)

我希望这只狗有一个新成员,比如说“ bite”。显然pluto['bite'] = True会失败,因为数据类被冻结。

所以我的想法是从 Dog 中创建一个子类,并从“pluto”实例中获取所有数据。

class AngryDog(Dog):
    # what will come here ?
Run Code Online (Sandbox Code Playgroud)

有没有办法避免手动将所有类 Dog 参数放入init中?像复制构造函数之类的东西。

理想情况下:

class AngryDog(Dog):
    def __init__(self, dog, bite = True):
        copy_construct(dog)
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-dataclasses

7
推荐指数
1
解决办法
2838
查看次数

取消请求返回true时如何做sthg?

下面的代码开始计数,3秒后,它将打印"i"变量的值.程序打印变量,但不会以我想要的样式打印.它不会在if(token.IsCancellationRequested)部分下打印Console.Writeline语句.我认为当取消请求为真时,程序会直接退出.当取消请求为真时,我是否可以打印出console.writeline语句?

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication17
{
class Program
{
    private static void Stop(CancellationTokenSource src)
    {
        Thread.Sleep(3000);
        src.Cancel();
    }

    static void Count(CancellationToken token)
    {
        for (int i = 0; i < 100000; i++)
        {
            Console.WriteLine(i);
            Thread.Sleep(80);

            if (token.IsCancellationRequested)
            {
                Console.WriteLine("Current number is :" + i.ToString());
                break;
            }
            else
            {
                Console.Clear();
            }

        }
    }
    static void Main(string[] args)
    {
        CancellationTokenSource src1 = new CancellationTokenSource();
        CancellationToken tkn1 = new CancellationToken();

        var task1 = Task.Run(() => Count(tkn1), tkn1);
        var task2 …
Run Code Online (Sandbox Code Playgroud)

c#

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

标签 统计

c# ×1

python ×1

python-3.x ×1

python-dataclasses ×1