小编mir*_*nd4的帖子

类型错误:“类型”对象不可迭代 - 迭代对象实例

我正在做一个项目,我想让我的一个类可迭代。据我所知,我可以使用元类来做到这一点。

首先,我想了解元类是如何工作的。因此,我想展示我自己的练习示例,其中我制作了 Car 课程。所以在这里我想让我的 Car 类对象可迭代,然后我想在主函数中打印它们的名称。

代码示例如下:

__author__ = 'mirind4'

class IterableCar(type):
    def __iter__(self):
        return iter(self.__name__)

class Car(object):
    __metaclass__ = IterableCar

    def __init__(self, name):
        self.name = name


if __name__=='__main__':

    car1 = Car('Mercedes')
    car2 = Car('Toyota')
    for cars in Car:
        print (cars.name)
Run Code Online (Sandbox Code Playgroud)

但不幸的是我得到了一个类型错误:

TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)

你能不能告诉我我的代码哪里出错了?到目前为止,我已经通过这个网站和互联网检查了类似的问题,但我不知道问题是什么。我正在使用 python 3.4。提前致谢!

python iterable

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

C# 使用动态构造的事件处理程序处理 DDD 域事件

我正在使用 ASP.NET Core 2.0 和 EF Core 2.0 构建一个应用程序。至于解耦我的领域中的不同类型的逻辑,我使用DDD(领域驱动设计)的领域事件。让我们深入了解实施情况,看看我有什么,然后我将讨论我的问题。首先,让我们看看我的领域事件相关类的通用实现。首先是标记界面IDomainEvent

public interface IDomainEvent
{
}
Run Code Online (Sandbox Code Playgroud)

在它旁边我有一个通用IHandler类:

public interface IHandler<in T> where T : IDomainEvent
{
    void Handle(T domainEvent);
}
Run Code Online (Sandbox Code Playgroud)

然后我有一DomainEvents堂课:

private static List<Type> _handlers;

public static void Init()
{
    InitHandlersFromAssembly();
}

private static void InitHandlersFromAssembly()
{
    _handlers = Assembly.GetExecutingAssembly()
        .GetTypes()
        .Where(x => x.GetInterfaces().Any(y => y.IsGenericType && y.GetGenericTypeDefinition() == typeof(IHandler<>)))
        .ToList();
}

public static void Dispatch(IDomainEvent domainEvent)
{
    foreach (var handlerType in _handlers)
    {
        if (CanHandleEvent(handlerType, …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design autofac asp.net-core

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

.NET Core WebAPI 后备 API 版本,以防缺少次要版本

经过多次尝试和阅读文章后,我决定将我的问题放在这里。我想要的是:我正在研究应用程序的 api 版本控制。.NET Core(包)支持的版本格式Microsoft.AspNetCore.Mvc.Versioning是Major.Minor,这就是我想在我从事的项目中使用的版本格式。我想要的是一个后备版本,以防客户端未指定次要版本。我正在使用 .NET core 2.2,并使用api-version标头中指定的内容。相应的 API 版本控制配置如下所示:

    services.AddApiVersioning(options => { 
        options.ReportApiVersions = true;
        options.ApiVersionReader = new HeaderApiVersionReader("api-version");
        options.ErrorResponses = new ApiVersioningErrorResponseProvider();
    });
Run Code Online (Sandbox Code Playgroud)

我每个版本都有以下两个控制器:(为了解决这个问题,控制器被简化了):

[ApiVersion("1.0")]  
[Route("api/[controller]")]  
public class ValueControllerV10 : Controller  
{  
    [HttpGet(Name = "collect")]  
    public String Collect()  
    {  
        return "Version 1.0";  
    }  
} 


[ApiVersion("1.1")]  
[Route("api/[controller]")]  
public class ValueControllerV11 : Controller  
{  
    [HttpGet(Name = "collect")]  
    public String Collect()  
    {  
        return "Version 1.1";  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

如果客户端指定,api-version=1.0则使用 ValueControllerV10。当然,如果客户端指定api-version=1.1,则按预期使用 ValueControllerV11。

现在我的问题来了。如果客户端指定api-version=1(因此只有主要版本而没有次要版本),则使用 ValueControllerV10。如果我没记错的话,这是因为 …

asp.net-mvc asp.net-web-api .net-core api-versioning

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