说我有以下课程:
public class General<T> { }
Run Code Online (Sandbox Code Playgroud)
我想知道一个对象是否属于那种类型.我知道我可以使用反射来找出该对象是否属于该泛型类型Type.GetGenericTypeDefinition,但我想避免这种情况.
是否有可能做某事obj is General<T>,或obj.GetType().IsAssignableFrom(typeof(General<T>))?
我很惊讶我找不到类似的问题,尽管我在搜索中可能使用了错误的关键字.
我正在使用(Newtonsoft)的JSON.Net库和C#,我想自定义其默认XML转换的一部分.
例如,如果我想更改数组的XML转换,而不是说我有以下JSON字符串:
{
"object":
{
"a":
{
[
"d",
"e",
"f"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用JSON.Net的默认转换器将其转换为XML,我得到:
<object>
<a>d</a>
<a>e</a>
<a>f</a>
</object>
Run Code Online (Sandbox Code Playgroud)
但是,我希望它转换为:
<object>
<a special:type="array">
<element>d</element>
<element>e</element>
<element>f</element>
</a>
</object>
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式采用现有的转换方法并稍微改变一下吗?
XML和JSON都是基于树的结构,这应该使它们的解析器模块化.所以我正在寻找一个可以用来覆盖其转换功能的类:
protected override XmlNode ToXmlNode(JsonNode jNode)
{
if (jNode.Type == JsonType.Array)
{
XmlNode xNode = this.XDocument.CreateElement(jNode.Name)
foreach (JsonNode jSub in jNode.Children)
{
var newJSub = jSub.Clone();
newJSub.Name = "element";
xNode.AppendChild(this.ToXmlNode(newJSub));
}
return xNode;
}
else
return base.ToXmlNode(jNode);
}
Run Code Online (Sandbox Code Playgroud)
(我正在使用.Net v2.0)
有谁知道任何有用的东西?
有没有办法让TypeVar(或其他格式)捕获函数的所有参数?例如,假设我想包装一个通用函数,使其所有参数都在一个元组中给出:
def invoke(f: Callable[..., T], args: Tuple[...]) -> T:
return f(*args)
Run Code Online (Sandbox Code Playgroud)
只是...我将使用静态类型检查来强制 be 的内容Tuple与函数的参数具有相同的类型,而不是省略号 ( )。
谢谢。
我有一些类似于下面的代码。该代码泄漏,我不知道为什么。泄漏的是在 C 代码中简单创建 Python 类实例。我用来检查泄漏的函数是create_n_times下面定义的,它只是创建新的 Python 实例并在循环中取消引用它们。
这本身并不是 MWE,而是示例的一部分。为了更容易理解,代码的作用是:
set_ip_settings_type.create_n_times然后,调用C 扩展函数,该函数创建和销毁nPython 数据类的实例。有人可以帮忙吗?
在Python中:
import c_api
@dataclass
class IpSettings:
ip: str
port: int
dhcp: bool
c_api.set_ip_settings_type(IpSettings)
c_api.generate_n_times(100000)
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,我将以下代码编译为名为的 Python 扩展c_api(它是该库定义的一部分):
#include <Python.h>
// ... Other functions including a "PyInit" function
extern "C" {
PyObject* ip_settings_type = NULL;
PyObject* set_ip_settings_type(PyObject* tp)
{
Py_XDECREF(ip_settings_type);
Py_INCREF(tp);
ip_settings_type = tp;
return Py_None;
}
PyObject* create_n_times(PyObject* n)
{
long n_ = PyLong_AsLong(n); …Run Code Online (Sandbox Code Playgroud) 我试图计算各种事件的输入字段的值,而不管捕获的事件如何.
我正在考虑事件keypress keyup keydown cut paste事件(我忘了什么吗?).
我正在尝试确定文本输入INSERT模式是打开(默认 - 打开)还是关闭.我无法通过捕获该键的键事件来确定模式,但我不知道初始状态是什么.
有谁知道吗?优选地 - 包括IE8 +,Chrome和FF的跨浏览器解决方案.
任何解决方案,或者用Barney Stinson的话说,"骗局,骗局,喧嚣,蒙骗,开局,脆弱的火焰,战术和竹子"都可以帮助我.
提前致谢.
使用Newtonsoft的.Net库将JSON转换为XML,有没有办法将特定的JSON元素转换为XML属性?
例如,采用以下JSON:
{
"array": {
"item": [
1,
2,
3
],
"length": 3
}
}
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
<array length="3">
<item>1</item>
<item>2</item>
<item>3</item>
</array>
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑2:最后我能够生成一个MWE:
from typing import Generic, TypeVar
T = TypeVar('T')
class Cache:
__dict = {}
@classmethod
def add(cls, item):
cls.__dict[item] = (item, [item, item, item, {item: item}])
print('On setting:', item in cls.__dict)
def __init_subclass__(cls, **kwargs):
Cache.add(cls)
class Class(Cache, Generic[T]):
pass
d = Cache._Cache__dict
tp = list(d)[0]
print('On checking:', tp in d)
Run Code Online (Sandbox Code Playgroud)
在 python 3.6 中,输出是:
On setting: True
On checking: False
Run Code Online (Sandbox Code Playgroud)
而在 3.8 中则是:
On setting: True
On checking: True
Run Code Online (Sandbox Code Playgroud)
如果这还不够好奇,如果我删除 的继承Generic[T],一切都很好。
原来的
我正在使用 Python 3.6,KeyError当尝试从字典中获取密钥时,我得到了: …
c# ×3
python ×3
json ×2
json.net ×2
xml ×2
.net ×1
c ×1
converter ×1
dictionary ×1
generics ×1
javascript ×1
keyboard ×1
python-3.6 ×1
python-3.x ×1
python-c-api ×1
type-hinting ×1
types ×1