我正在做一个项目,我想让我的一个类可迭代。据我所知,我可以使用元类来做到这一点。
首先,我想了解元类是如何工作的。因此,我想展示我自己的练习示例,其中我制作了 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。提前致谢!
我正在使用 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) 经过多次尝试和阅读文章后,我决定将我的问题放在这里。我想要的是:我正在研究应用程序的 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。如果我没记错的话,这是因为 …