相关疑难解决方法(0)

如何知道对象在Python中是否具有属性

有没有办法在Python中确定对象是否具有某些属性?例如:

>>> a = SomeClass()
>>> a.someProperty = value
>>> a.property
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'property'
Run Code Online (Sandbox Code Playgroud)

在使用之前如何判断是否a具有该属性property

python attributes

1491
推荐指数
13
解决办法
78万
查看次数

136
推荐指数
10
解决办法
8万
查看次数

检查属性是否存在的最佳方法是哪种?

哪种方法可以检查属性是否存在?

Jarret Hardie提供了这个答案:

if hasattr(a, 'property'):
    a.property
Run Code Online (Sandbox Code Playgroud)

我看到它也可以这样做:

if 'property' in a.__dict__:
    a.property
Run Code Online (Sandbox Code Playgroud)

一种方法通常比其他方法更常用吗?

python attributes

64
推荐指数
3
解决办法
6万
查看次数

Python中的廉价异常处理?

我在前面的回答中读到异常处理在Python中很便宜所以我们不应该进行预条件检查.

我以前没有听说过这个,但我对Python比较陌生.异常处理意味着动态调用和静态返回,而if语句是静态调用,静态返回.

如何做好检查是坏的,try-except好的,似乎是另一种方式.谁可以给我解释一下这个?

python performance exception-handling

29
推荐指数
5
解决办法
7521
查看次数

python isinstance vs hasattr vs try/except:什么更好?

我试图找出确定是否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)

哪种方法首选(以及为什么)?

python attributes exception-handling isinstance

14
推荐指数
3
解决办法
4413
查看次数

有没有办法在函数中添加属性作为函数定义的一部分?

do_something.n每次调用函数时,函数属性都会递增.

让我感到困扰的是我在函数do_something.n=0 之外声明了属性.

回答使用queue.PriorityQueue的问题,不关心使用"函数属性"进行比较以提供与PriorityQueue一起使用的独特计数器 - MartijnPieters有一个更好的解决方案)

MCVE:

def do_something():
    do_something.n += 1
    return do_something.n 

# need to declare do_something.n before usign it, else 
#     AttributeError: 'function' object has no attribute 'n'
# on first call of do_something() occures
do_something.n = 0

for _ in range(10):
    print(do_something())  # prints 1 to 10
Run Code Online (Sandbox Code Playgroud)

还有什么其他方法来定义函数"内部"的属性,以便在AttributeError: 'function' object has no attribute 'n'忘记它时避免使用它?


从评论中编辑了很多其他方式:

python python-3.x

4
推荐指数
1
解决办法
96
查看次数

检查python中是否有任何属性的任何替代方法?

a = SomeClass()
if hasattr(a, 'property'):
        a.property
Run Code Online (Sandbox Code Playgroud)

这是检查是否有房产的唯一方法吗?有没有其他方法可以做同样的事情?

python attributes

3
推荐指数
2
解决办法
1084
查看次数