Python中的内置类型究竟是什么?

时间:2011-12-30 14:44:16

标签: python

在Ruby和Python世界中,我一直听到“一切都是对象”。那么,什么是内置函数呢?有人可以用非专业英语来解释吗? 例如:

file=open(abc.txt)

open是一个内置函数。它是一个对象吗?这是一种方法吗?什么课?

如果一切都是对象,我们如何最终使用Python中的函数?我的意思是,我们不应该拥有类,对象,方法和属性,而不是函数吗?我认为我们在C语言中有函数.Python,Ruby和Java都有类,对象,属性和方法。

在Ruby( irb )中,您可以执行类似1.class的操作,这将为您提供Fixnum,它会显示它属于哪个类。我似乎无法在Python shell中执行此操作。有没有等价的?

供参考:

  • 我使用的是Python 2.7
  • 相对较新的编程所以请使用layperson英语。例如,我在其中一个答案中读到“但是一切都是一个对象,因为它可以被赋值给一个变量或者作为参数传递给一个函数” - 不知道这意味着什么。

2 个答案:

答案 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'>]