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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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(3)中,某个类的实例?_Python_Oop_Python Object - Fatal编程技术网

是";“一切”;在Python(3)中,某个类的实例?

是";“一切”;在Python(3)中,某个类的实例?,python,oop,python-object,Python,Oop,Python Object,我是Python新手,但已经多次阅读了Python中的一切都是对象这一原则 这是否意味着一切都是某个类的实例 例如,假设我们有一个函数f。请考虑运行以下内容: def f(x): return x print(type(f)) 我得到。这是否意味着在某个地方有一个名为function的类,其中f就是一个实例?然后,是否可以使用g=function(此处的一些参数)创建函数,就像我自己定义了类function一样?您可以使用def关键字创建函数实例。 它是某个泛型类函数的子类。 您可以

我是Python新手,但已经多次阅读了Python中的一切都是对象这一原则

这是否意味着一切都是某个类的实例

例如,假设我们有一个函数
f
。请考虑运行以下内容:

def f(x):
    return x

print(type(f))

我得到
。这是否意味着在某个地方有一个名为
function
的类,其中
f
就是一个实例?然后,是否可以使用
g=function(此处的一些参数)
创建函数,就像我自己定义了类
function
一样?

您可以使用
def
关键字创建函数实例。
它是某个泛型类
函数
的子类。 您可以将其与需要实现
\uuuu call\uuu
方法的某个虚拟类进行比较。
使用
\uuuu调用\uuuu
方法,可以将任何对象用作函数:

class你好:
定义调用(self,name):
打印(f'Hello{name}')
h=你好()
打印(h(“卷心菜”)#->“你好,卷心菜”

是的,在Python3中,一切都是一个
对象,因此是某个类的实例。我们可以使用
isinstance
明确检查这一点

def f(x):
    return x

print(isinstance(f, object)) # True
有趣的是,内置函数中没有定义名称
函数
,但是我们可以很好地使用它,正如您已经确定的那样,可以这样说

function = type(f)
值得注意的是,内置函数和(绑定)方法的类型与常规函数不同

class A:
  def foo(self):
    pass

print(type(f))      # <class 'function'>
print(type(abs))    # <class 'builtin_function_or_method'>
print(type(A.foo)   # <class 'function'>
print(type(A().foo) # <class 'method'>

正如评论中已经指出的那样,实际上调用这个庞然大物是不寻常的,我无法立即在Python的网站上找到任何关于如何这样做的好文档。

从技术上讲,是的-您可以尝试实例化一个函数
g
,比如
g=f.\uu class\uuuu()
,但是你会发现它需要一个
code
参数,如果你看一下
f.\uuuu code\uuuu
,你会很快发现这不容易实现——你可能正在构建一个Python编译器,或者使用现有的编译器。这是个坏主意-你希望用这个解决什么问题,因为这似乎是一个XY问题?@Grismar感谢你的评论。我没有解决任何具体问题。我是Python新手,我只是想更多地了解“Python中的一切都是对象”。
class function(object)
 |  function(code, globals, name=None, argdefs=None, closure=None)
 |  
 |  Create a function object.
 |  
 |  code
 |    a code object
 |  globals
 |    the globals dictionary
 |  name
 |    a string that overrides the name from the code object
 |  argdefs
 |    a tuple that specifies the default argument values
 |  closure
 |    a tuple that supplies the bindings for free variables
 |  
 |  Methods defined here:
 |  
 |  __call__(self, /, *args, **kwargs)
 |      Call self as a function.
 |  
 |  __get__(self, instance, owner, /)
 |      Return an attribute of instance, which is of type owner.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __annotations__
 |  
 |  __closure__
 |  
 |  __code__
 |  
 |  __defaults__
 |  
 |  __dict__
 |  
 |  __globals__
 |  
 |  __kwdefaults__