我怎么做pythonicly:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Run Code Online (Sandbox Code Playgroud)
看起来很傻我不能只传入classinfo的列表:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Run Code Online (Sandbox Code Playgroud)
那么isinstanceofany功能是什么?
在我的DateTime类中,这是检查对象是否是类的实例的唯一方法吗?
$cls = ReflectionClass("DateTime");
if (! $cls->isInstance( (object) $var ) ) {
// is not an instance
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点沉重.
我想转换此现有代码以使用模式匹配:
if isinstance(x, int):
pass
elif isinstance(x, str):
x = int(x)
elif isinstance(x, (float, Decimal)):
x = round(x)
else:
raise TypeError('Unsupported type')
Run Code Online (Sandbox Code Playgroud)
如何使用模式匹配编写检查,以及如何同时isinstance测试多种可能的类型?(float, Decimal)
如何检查对象是否是命名元组的实例?
有人可以给我一个解释,为什么isinstance()在下列情况下返回True?编写代码时,我期待False.
print isinstance(True, (float, int))
True
Run Code Online (Sandbox Code Playgroud)
我的猜测是它的python的内部子类,如0和1 - wheter float或int - 在用作布尔值时都会计算,但不知道确切的原因.
什么是解决这种情况的最pythonic方式?我可以使用,type()但在大多数情况下,这被认为是较少pythonic.
我发现,在Python都collections.Iterable和typing.Iterable在类型注释,并检查对象是否是迭代的,即可以使用,无论是isinstance(obj, collections.Iterable)和isinstance(obj, typing.Iterable)作品。我的问题是,它们之间有什么区别?在哪些情况下更喜欢哪一个?
我使用反射来看看是否被连接到一个类的属性的注释,是一种特定类型的.目前我在做:
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
Run Code Online (Sandbox Code Playgroud)
这让我觉得有点笨拙,因为它依赖于一个完全限定的类名字符串.如果命名空间将来发生更改,则可能会导致细微错误.
我想要做:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
Run Code Online (Sandbox Code Playgroud)
但它javax.validation.Valid是一个抽象类,无法实例化.有没有办法模拟instanceof(或基本上使用isInstance)对接口或抽象类?
我目前在pdb trace中想出这个
ipdb> isinstance(var, Type)
False
ipdb> type(var)
<class 'module.Type'>
ipdb> Type
<class 'module.Type'>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
PS 按预期isinstance(var, type(var))返回True
我如何使用Python的负面形式isinstance()?
通常否定会起作用
x != 1
if x not in y
if not a
Run Code Online (Sandbox Code Playgroud)
我只是没有看到isinstance()的一个例子,所以我想知道是否有一个正确的方法来使用isinstance()的否定.
我试图找出确定是否obj可以执行操作的对象的不同方法之间的权衡do_stuff().据我了解,有三种方法可以确定这是否可行:
# Way 1
if isinstance(obj, Foo):
obj.do_stuff()
# Way 2
if hasattr(obj, 'do_stuff'):
obj.do_stuff()
# Way 3
try:
obj.do_stuff()
except:
print 'Do something else'
Run Code Online (Sandbox Code Playgroud)
哪种方法首选(以及为什么)?
isinstance ×10
python ×8
annotations ×2
instanceof ×2
types ×2
attributes ×1
boolean ×1
class ×1
comparison ×1
instance ×1
int ×1
iterable ×1
java ×1
namedtuple ×1
negate ×1
negation ×1
php ×1
python-3.10 ×1
reflection ×1