Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python hasattr检查函数是否具有属性_Python_Oop - Fatal编程技术网

Python hasattr检查函数是否具有属性

Python hasattr检查函数是否具有属性,python,oop,Python,Oop,我刚才在看hasattr方法,它接受一个对象作为参数 检查“一切都是对象”理论。我创建了一个带有属性“name”的用户定义函数,但它返回False。我写的代码是: def trial(): name = "james" hasattr(trial, "name") 这是否意味着函数不是对象?如果有人能帮我们解决这个问题,我将不胜感激。函数是对象,但您创建的是一个带有局部变量名称的函数,它不是该函数的属性。让我们检查一下函数代码: >>> trial.__code__

我刚才在看
hasattr
方法,它接受一个对象作为参数

检查“一切都是对象”理论。我创建了一个带有属性
“name”
的用户定义函数,但它返回
False
。我写的代码是:

def trial():
    name = "james"

hasattr(trial, "name")
这是否意味着函数不是对象?如果有人能帮我们解决这个问题,我将不胜感激。

函数是对象,但您创建的是一个带有局部变量
名称的函数,它不是该函数的属性。让我们检查一下函数代码:

>>> trial.__code__.co_varnames
('name',)
如您所见,
name
确实是函数的局部变量

但是,仍然可以在函数上定义属性:

>>> def trial():
...     name = "james"
... 
>>> trial.foo = 'bar'
>>> hasattr(trial, 'foo')
True
>>> getattr(trial, 'foo')
'bar'
为函数指定属性的方法是说
=,就像其他允许它的对象一样

(并不是说这一定是实现所需结果的最佳方式,只是作为一个演示,它是可能的)

函数是对象,但您创建的是一个带有局部变量
名称的函数,它不是该函数的属性。让我们检查一下函数代码:

>>> trial.__code__.co_varnames
('name',)
如您所见,
name
确实是函数的局部变量

但是,仍然可以在函数上定义属性:

>>> def trial():
...     name = "james"
... 
>>> trial.foo = 'bar'
>>> hasattr(trial, 'foo')
True
>>> getattr(trial, 'foo')
'bar'
为函数指定属性的方法是说
=,就像其他允许它的对象一样


(并不是说这一定是实现预期结果的最佳方式,只是作为一个演示,它是可能的)

Python中的函数确实是一个对象,但函数中的局部变量不是它的属性

尝试在代码末尾添加以下内容:

>>> trial.__dir__()
它将显示您定义的函数的所有属性,并且您正在访问函数对象的属性

如果需要,甚至可以向函数对象添加属性,不过必须小心不要覆盖现有属性。试试这个:

>>> trial.foo = 'bar'
>>> dir(trial)  # Equivalent to trial.__dir__(). 'foo' is now in the list.
>>> hasattr(trial, 'foo')
>>> print(trial.foo)

当您的代码正在执行时,函数从定义的那一刻起就变得有形,但其中的变量是短暂的,因为它们是仅在函数执行期间(即调用函数时)存储在内存中的值,并且在函数完成后消失。实际上,它比这复杂一点,混合使用垃圾收集,但从简单的角度来看,这几乎就是实际情况。

Python中的函数确实是一个对象,但函数中的局部变量不是它的属性

尝试在代码末尾添加以下内容:

>>> trial.__dir__()
它将显示您定义的函数的所有属性,并且您正在访问函数对象的属性

如果需要,甚至可以向函数对象添加属性,不过必须小心不要覆盖现有属性。试试这个:

>>> trial.foo = 'bar'
>>> dir(trial)  # Equivalent to trial.__dir__(). 'foo' is now in the list.
>>> hasattr(trial, 'foo')
>>> print(trial.foo)

当您的代码正在执行时,函数从定义的那一刻起就变得有形,但其中的变量是短暂的,因为它们是仅在函数执行期间(即调用函数时)存储在内存中的值,并且在函数完成后消失。实际上,它比这个复杂一点,混合中有垃圾收集,但从简单的角度来看,情况差不多就是这样。

函数是一个对象,但
name
不是一个属性
name
是在运行
trial()
函数时创建的变量。函数是对象,确实有属性,但局部变量不是。例如,如果在函数定义和检查之间添加
trial.name='James'
,您将看到它是真的。您没有具有属性
name
的函数。您能举一个函数具有属性的示例吗,我的印象是属性只是对象的属性。那么为什么变量不是属性呢。@SahibSingh变量是处理函数中定义的过程而产生的名称。函数是一个对象,但
name
不是属性
name
是在运行
trial()
函数时创建的变量。函数是对象,确实有属性,但局部变量不是。例如,如果在函数定义和检查之间添加
trial.name='James'
,您将看到它是真的。您没有具有属性
name
的函数。您能举一个函数具有属性的示例吗,我的印象是属性只是对象的属性。那么为什么变量不是属性呢。@SahibSingh变量是处理函数中定义的过程所产生的名称。