在Ruby和Python世界中,我一直听到“一切都是对象”。那么,什么是内置函数呢?有人可以用非专业英语来解释吗? 例如:
file=open(abc.txt)
open是一个内置函数。它是一个对象吗?这是一种方法吗?什么课?
如果一切都是对象,我们如何最终使用Python中的函数?我的意思是,我们不应该拥有类,对象,方法和属性,而不是函数吗?我认为我们在C语言中有函数.Python,Ruby和Java都有类,对象,属性和方法。
在Ruby( irb )中,您可以执行类似1.class
的操作,这将为您提供Fixnum
,它会显示它属于哪个类。我似乎无法在Python shell中执行此操作。有没有等价的?
供参考:
答案 0 :(得分:3)
它们都列在这里:http://docs.python.org/library/functions.html
函数open
是一个对象(所有函数都是对象),属于__builtin__
模块。它们只是内置的,可供所有对象使用,因为它们是自动导入的(类似from __builtin__ import *
)。
>>> print repr(open)
<built-in function open>
>>> print open.__module__
__builtin__
>>> import __builtin__
>>> print __builtin__.open
<built-in function open>
<强>更新强>
您在编辑中提到,您不知道赋值函数的含义。
>>> o = open
>>> print repr(open)
<built-in function open>
>>> print repr(o)
<built-in function open>
>>> o('file.txt')
<open file 'file.txt', mode 'r' at 0x107fe49c0>
答案 1 :(得分:0)
一切都是一个对象,但并不是每个对象都是经典意义上的有用类的实例。据我所知,有些事情你最好不要作为普通物体处理(功能是一个很好的例子,已经给出了)。
请注意,您可以使用type(obj)
或检查obj.__class__
来复制Ruby的.class
方法(请参阅delnan关于整数警告的评论) 。您还可以查看“订单”。发布type.mro(type(obj))
的完整继承序列。
In [7]: type.mro(type(open))
Out[7]: [<type 'builtin_function_or_method'>, <type 'object'>]
In [4]: import datetime
In [5]: d = datetime.datetime(2009,11,11)
In [6]: type.mro(type(d))
Out[6]: [<type 'datetime.datetime'>, <type 'datetime.date'>, <type 'object'>]