是";“一切”;在Python(3)中,某个类的实例?
我是Python新手,但已经多次阅读了Python中的一切都是对象这一原则 这是否意味着一切都是某个类的实例 例如,假设我们有一个函数是";“一切”;在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关键字创建函数实例。 它是某个泛型类函数的子类。 您可以
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__