问题:我必须检查返回的值是否为Python字典.
Q1.这些选项中的哪一个是正确的方法?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
Run Code Online (Sandbox Code Playgroud)
然后有其他变体使用is运算符而不是==.
Q2.许多人说检查对象的类型通常是一种不好的做法,但对于我最初的问题,我还有其他选择吗?
在我正在研究的Django项目中,我在视图中导入一个表单,如下所示
#views.py
from forms import SomeForm
Run Code Online (Sandbox Code Playgroud)
然后在我的测试文件中
#form_test.py
from app.forms import SomeForm
.
.
.
self.assertTrue(isinstance(response.context['form'], SomeForm))
Run Code Online (Sandbox Code Playgroud)
为什么这个实例不起作用?
如果我检查两个对象的type()输出,我得到这个:
response.context form:预期形式:
我可以通过使views.py中的导入机制与form_test.py中的导入机制相匹配来解决这个问题,但这似乎是错误的方法.
供参考,文件结构如下:
我正在研究一个函数,我想知道一个对象是否是一个实例re.MatchObject.我尝试使用isinstance但是re.MatchObject是C型,这不起作用.
我仍然可以做类似hasattr( ... , 'pos')或任何其他re.MatchObject属性的替代测试,但我不认为它是一个很好的解决方案.还有其他方法吗?
我遇到了问题isinstance().
我正在使用Python 2.7.8,并从shell运行脚本.
array我正在测试的元素包含一个数字,但是这个函数返回false; 使用number.Numbers:
import numbers
...
print array[x][i]
>> 1
...
print isinstance(array[x][i], numbers.Number)
>>> False
Run Code Online (Sandbox Code Playgroud)
也试过这个,从这篇文章
import types
...
print isinstance(array[x][i], (types.IntType, types.LongType, types.FloatType, types.ComplexType))
>>> False
Run Code Online (Sandbox Code Playgroud)
从同一篇文章中,我试过了
isinstance(array[x][i], (int, float, long, complex))
Run Code Online (Sandbox Code Playgroud)
我也试过这个解决方案没有用.
全部归还错误.
我有一个变量,可能是也可能不是一个同情类.我想将它转换为浮点数,但我在以一般方式执行此操作时遇到问题:
$ python
Python 2.7.3 (default, Dec 18 2014, 19:10:20)
[GCC 4.6.3] on linux2
>>> import sympy
>>> x = sympy.sqrt(2)
>>> type(x)
<class 'sympy.core.power.Pow'>
>>> y = 1 + x
>>> type(y)
<class 'sympy.core.add.Add'>
>>> z = 3 * x
>>> type(z)
<class 'sympy.core.mul.Mul'>
>>> if isinstance(z, sympy.core):
... z = z.evalf(50) # 50 dp
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of …Run Code Online (Sandbox Code Playgroud) 该列表显示了你需要实现你的类方法被"视为"为序列:__getitem__,__len__,__contains__,__iter__,__reversed__,index,和count.那么为什么这个最小的实现不起作用,为什么issubclass(S, Sequence) is False呢?
from collections import *
class S(object):
def __getitem__(self, item):
raise IndexError
def __len__(self):
return 0
def __contains__(self, item):
return False
def __iter__(self):
return iter(())
def __reversed__(self):
return self
def index(self, item):
raise IndexError
def count(self, item):
return 0
issubclass(S, Iterable) # True :-)
issubclass(S, Sized) # True :-)
issubclass(S, Container) # True :-)
issubclass(S, Sequence) # False :-(
Run Code Online (Sandbox Code Playgroud)
我需要实现一个我忽略的额外方法吗?我是否误解了抽象基类?子类化当然 …
python duck-typing subclassing abstract-base-class isinstance
我如何重构这个例子以避免我需要在每种数据类型中检查isInstance的这种情况?我可以遵循任何模式吗?
public interface GenericData {}
public interface IntegerData extends GenericData{
public Integer Data();
}
public interface StringData extends GenericData{
public String Data();
}
public interface Client {
public boolean LoadData(GenericData data);
}
public class IntegerClientImpl implements Client{
public boolean LoadData(GenericData data){
return IntegerData.class.isInstance(data);
};
}
Run Code Online (Sandbox Code Playgroud) 我想扫描一个模块(使用dir())并提取type扩展某个父类的类的所有类名(对象).有没有办法在没有首先创建我可以检查的实例的情况下执行此操作isinstance()?
考虑这个例子?
p = [1,2,3,4], (1,2,3), set([1,2,3])]
Run Code Online (Sandbox Code Playgroud)
而不是检查每种类型
for x in p:
if isinstance(x, list):
xxxxx
elif isinstance(x, tuple):
xxxxxx
elif isinstance(x, set):
xxxxxxx
Run Code Online (Sandbox Code Playgroud)
以下是否有一些等价物:
for element in something:
if isinstance(x, iterable):
do something
Run Code Online (Sandbox Code Playgroud) 我有一个名为的类A,有两个子类B和C.以下是否有意义?或者有更好的方法吗?
class A():
...
def do_stuff(self):
self.do_this()
self.do_that()
if isInstance(self, B):
self.do_the_b_stuff()
elif isInstance(self, C):
self.do_the_c_stuff()
Run Code Online (Sandbox Code Playgroud) isinstance ×10
python ×9
types ×2
comparison ×1
django ×1
duck-typing ×1
import ×1
inheritance ×1
iterable ×1
java ×1
python-2.7 ×1
regex ×1
self ×1
static ×1
subclassing ×1
sympy ×1