小编big*_*_29的帖子

关于泛型类型的IronPython重载决策

我有一个带有重载静态方法的C#类,如下所示:

// Added to the Simple class in Tutorial\Extend\csextend.cs
public static int Foo(IEnumerable<int> values)
{
    return 1;
}

public static int Foo(IEnumerable<string> values)
{
    return 2;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试从IronPython 2.6中调用它们时出错.我正在传递一个包含字符串的python列表.

import clr
clr.AddReferenceToFile("csextend.dll")
import Simple

Simple.Foo(["alpha", "bravo", "charlie"])
Run Code Online (Sandbox Code Playgroud)
TypeError: Multiple targets could match: Foo(IEnumerable[str]), Foo(IEnumerable[
int])

我的第一个问题是为什么这不起作用?似乎重载解决方案应该对此起作用.这是IronPython中的错误吗?什么是最干净的解决方法.我可以重命名例程,这样它们就不会相互重载,但后来我让铁心怪怪改变了C#类的设计.

是否有一种干净的方法可以给python一个线索,即列表完全由一种类型组成,它应该选择一个特定的重载?

此问题相关

ironpython

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

读取分离的 sqlalchemy 对象的属性会引发 DetachedInstanceError

我正在使用短暂的 sqlalchemy 会话将对象添加到 sqlite 数据库。一些对象在会话结束后仍处于只读、分离状态。不幸的是,如果会话已关闭,则访问分离对象的属性会引发异常。这是一个简化的代码示例

from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)

engine = create_engine('sqlite:///foo.db', echo=False)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

f = Foo(name='foo1')
print('state=transient : name=', f.name)
session.add(f)
print('state=pending : name=', f.name)
session.commit()
session.close()
print('state=detached : name=', f.name)
Run Code Online (Sandbox Code Playgroud)
# output
state=transient : name= foo1
state=pending : name= foo1
Traceback (most recent call last): …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

标签 统计

ironpython ×1

python ×1

sqlalchemy ×1