Are the following code snippets equivalent?
class a
{}
class b:a
{}
b foo=new b();
Run Code Online (Sandbox Code Playgroud)
//here it comes
foo is a
Run Code Online (Sandbox Code Playgroud)
//...is the same as...
typeof(a).isinstanceoftype(foo)
Run Code Online (Sandbox Code Playgroud)
或者也许其中一个其他类型方法映射更接近于运算符.例如"IsAssignableFrom"或"IsSubclassOf"
我刚读过"isinstance()被认为是有害的",这似乎是合理的.简而言之,它主张避免使用这个功能.
好吧,刚才我正在编写一个程序,它将输入结构化为树,并且需要树的结构信息.没有时间实现GUI,我强加给用户将其写入配置文件(我知道这是一个糟糕的接口,但时间表非常紧张).我的用户非常技术,但不一定知道python.我选择该文件将包含表示输入树的列表(列表列表等)列表,最终元素是树的叶节点.我认为这比在用户上强加字典的合成更好.
我计划递归地解析列表如下(省略树的结构的使用,让我们简化并说必须在每个叶节点上调用treatLeafNode()):
def parseTree(input):
if isinstance (input, list):
for item in input:
parseTree(item)
else:
treatLeafNode(item)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,我想知道是否有一种简单的方法来解决这个问题,而不使用isinstance()......
有人知道吗?
class A{
public A(){
System.out.println("in A");
}
}
public class SampleClass{
public static void main(String[] args) {
A a = new A();
System.out.println(A.class.isInstance(a.getClass()));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
Run Code Online (Sandbox Code Playgroud)
为什么这是假的?双方A.class并a.getClass()不能返回相同的类!
在哪种情况下我们会从isInstance()方法中得到真实的结果?
我正在寻找的只是可能值的列表,classinfo因为该文档未提供任何值,而且我似乎无法在线找到其他任何位置,更不用说SO了。
isinstance(object, classinfo) 无法识别类的实例。
我打印type(object)了该类并验证了它们是否是相同类型。他们俩都印出了完全一样的东西,但是当我尝试type(object) == class返回时False。
这是该类的代码:
class Convolute(object):
def __init__(self, channels, filter_shape, pool_shape, pool_type, stride_length=1):
self.channels = channels
self.filter_shape = filter_shape
self.filters = [np.random.randn(filter_shape[0], filter_shape[1]) for i in range(channels)]
self.biases = [random.random() for i in range (channels)]
self.stride_length = stride_length
self.pool_shape = pool_shape
self.pool_type = pool_type
Run Code Online (Sandbox Code Playgroud)
这是该类的实例:
con1 = n.Convolute(3, (4, 4), (4, 4), 0)
Run Code Online (Sandbox Code Playgroud)
这是当我尝试验证它们是否相同类型时在python shell中的输出:
>>> import network as n
>>> con1 = n.Convolute(3, (4, 4), (4, 4), 0)
>>> type(con1) …Run Code Online (Sandbox Code Playgroud) 为什么有这么多不同的方法来测试字典?如果对象是字典,最现代的测试方法是什么?
adict = {'a': 1}
In [10]: isinstance(adict, types.DictType)
Out[10]: True
In [11]: isinstance(adict, types.DictionaryType)
Out[11]: True
In [12]: isinstance(adict, dict)
Out[12]: True
In [13]: isinstance(adict, collections.Mapping)
Out[13]: True
In [14]: isinstance(adict, collections.MutableMapping)
Out[14]: True
Run Code Online (Sandbox Code Playgroud) 我有 2 个对象,一个是日期时间,另一个是日期对象。当我想使用 isinstance (python 的首选方式)检查对象的类型时,我得到了一些荒谬的结果
>>> from datetime import date, datetime
>>> a=date.today()
>>> b=datetime.now()
>>> isinstance(a, date)
True
>>> isinstance(a, datetime)
False
>>> isinstance(b, date)
True # this should be False
>>> isinstance(b, datetime)
True
Run Code Online (Sandbox Code Playgroud)
为什么 datetime 对象实例检查 date 返回 true?目前我正在使用type来解决这个问题,但是没有解决方法吗?
>>> type(a) == date
True
>>> type(a) == datetime
False
>>> type(b) == date
False
>>> type(b) == datetime
True
Run Code Online (Sandbox Code Playgroud) 玩弄isinstance,我想知道它如何用于子类检查。
class A:
pass
class B(A):
pass
class C(B):
pass
print(isinstance(C(), C)) # True, I understand this fine
print(isinstance(C(), B)) # True, Ok, but how is this `True`?
print(isinstance(C(), A)) # True, this too?
Run Code Online (Sandbox Code Playgroud)
type() 和 isinstance() 有什么区别?解释这isinstance确实适用于我的第二个和第三个print语句中所见的子类。我的问题不是那个,但是,它是如何工作的?当 classA被定义时,它没有关于 classB或 class存在的信息C,同样B没有关于C.
根据isinstance 如何为 List 工作? __instancecheck__被调用isinstance,所以如果我的课A是之前创建B和C如何做到这一点的Python知道,C()确实是子类的一个实例(B的子类A)或子类的子类A …
PEP 622引入了match声明作为if-elif-else. 然而,我在提案或任何在线材料中找不到的一件事是该match声明是否可以用作表达式而不仅仅是作为声明。
举几个例子可以清楚地说明这一点:
示例1:
def make_point_2d(pt):
match pt:
case (x, y):
return Point2d(x, y)
case _:
raise TypeError("not a point we support")
Run Code Online (Sandbox Code Playgroud)
示例2:
match response.status:
case 200:
do_something(response.data)
case 301 | 302:
retry(response.location)
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,函数从子句内部返回case,而在第二个示例中,不返回任何内容。但我希望能够做类似以下假设示例的事情:
spouse = match name:
case "John":
"Jane"
case "David":
"Alice"
print(spouse)
Run Code Online (Sandbox Code Playgroud)
但它无法编译。
我正在看别人写的这段代码,我想知道它什么时候会评估为真.基本上,它说someType是someOtherType的一个实例.它甚至有意义吗?到目前为止,我已经尝试过:
derivedClass.GetType().IsInstanceOfType(typeof(BaseClass))
baseClass.GetType().IsInstanceOfType(typeof(DerivedClass))
myClass.GetType().IsInstanceOfType(typeof(MyClass))
Run Code Online (Sandbox Code Playgroud)
并且所有人都评价为假.
任何帮助表示赞赏.
isinstance ×10
python ×7
types ×3
c# ×2
class ×1
datetime ×1
dictionary ×1
instanceof ×1
java ×1
keyword ×1
python-3.10 ×1
python-3.x ×1