2011-12-30 21 views
2

私はRubyとPythonの両方の世界で「すべてがオブジェクトです」と聞きました。さて、組み込み関数は何ですか?誰かがそれをlaypersonの英語で説明できますか?たとえば :Pythonにはどのような組み込み型がありますか?

file=open(abc.txt) 

オープンは、組み込み関数です。それはオブジェクトですか?それは方法ですか?どのクラス?

の機能は、すべてがオブジェクトの場合、のPythonで機能しますか?つまり、関数の代わりにクラス、オブジェクト、メソッド、属性を持つべきではないということですか?私はC. Python、Ruby、Javaのような言語ではクラス、オブジェクト、属性、メソッドを持っていたと思った。ルビー(IRB)で

、あなたは1.classような何かを行うことができ、これは、それが属するクラスを紹介しますFixnumあなたを与えるだろう。私はPythonシェルでこれを行うことはできないようです。同等品はありますか? FYI

  • 私はそう素人英語を使用してくださいプログラミングでは比較的新しいPythonの2.7
  • を使用しています。例えば、私は答えの一つを読んでいますが、 "変数に代入することも、関数の引数として渡すこともすべてオブジェクトです"ということは何の意味もありません。
+1

機能を持つことと矛盾して「すべてがオブジェクトです」とはどういう意味ですか? – delnan

+0

@delnan Java POVからは、機能はありません。方法があります。各メソッドはいくつかのクラスに属します。だから、あなたが "オブジェクト"である "関数"を持っているならば。そのオブジェクトはあるクラスに属していなければなりません。それを使用する方法はfunction.method()です。 「関数」はPythonのオブジェクトです。私は、 "open"を使う方法はopen.method()だろうと思います。 "open"はオブジェクトの名前であり、 "method"はメソッド/関数である。 Javaでは、どのクラス/オブジェクトにも属さないメソッドを持つことはできません。 –

答えて

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> 
+0

これは__builtin__がクラスであることを意味しますか?オープンはこのクラスの方法ですか? –

+0

これはモジュールであり、クラスではありません。そして、いいえ、モジュール内の関数です。 –

+0

だから、私たちはクラス、属性、メソッド、オブジェクトを持っていません。しかし、私たちはPythonでモジュールと関数も持っていますか? –

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'>] 
+1

'1 .__ class__'は動作しませんが、構文のためだけです。 Pythonが浮動小数点数ではなく属性アクセスであることを認識させるには '1.0 .__ class__'または'(1).__ class ___ 'が必要です。 – delnan

+0

@deinan:私はそれを考えなかった、ありがとう! –

関連する問題