PythonのOOPで

転送   http://www.cnblogs.com/BeginMan/p/3510786.html

この記事では、Pythonを検討し、要約することを目指して:

1、どのようにクラスとインスタンスを作成するには?

# 创建类
class ClassName(object): """docstring for ClassName""" def __init__(self, arg): super(ClassName, self).__init__() self.arg = arg # 创建实例 instance = ClassName() 

2、クラシックと新しいクラスの違いは?

3.方法は何ですか?どのように定義するには?どのように使用するには?

この方法は、機能クラスである
クラス内で定義された
インスタンスにより呼び出され

4.どのような自己代表?どのような分野で使用されますか?

各クラスは、メソッドたselfパラメータ代表的なオブジェクト自体の例インスタンスメソッドが静か方法に移しインタプリタによって呼び出され、手動自己なしで来ます。
Pythonで自己がキーワードではありません。自己は、オブジェクトの現在のアドレスを表します。修飾されていないグローバル変数の呼び出しを避けるために、自己が発生します。
wangkangluo1 Pythonの理由を自己には非常に明確に言いました:

MyClassクラスを作成し、MyClassのは、インスタンス化されたMyObjectにオブジェクトは、そのオブジェクトのメソッドMyObject.method(ARG1、ARG2)、このプロセスを呼び出し、Pythonのは、自動的にMyclass.mehod(MyObjectに、ARG1、ARG2)に変換されます
どのPythonは、自己の原理です。あなたのメソッドは、パラメータのいずれかの種類を必要とするが、それでもこの方法に自己定義されたパラメータを持っていない場合であっても。

5、二つの動作クラスオブジェクト?

:生成されたオブジェクト・クラスのクラスを定義した後、クラスオブジェクトは、二つの動作サポートの参照および例
引用:クラスオブジェクトクラスのプロパティまたはメソッドを呼び出すために、例:クラス・オブジェクトのエンティティクラス・オブジェクト・インスタンス。

6. Pythonのクラスとインスタンスのプロパティとは何ですか?

プロパティは、別のオブジェクトへのデータ要素または機能です!例えば、このような複雑なPythonのいくつかのタイプのようなドット表記によるアクセスは、持っているデータの属性を、リスト、および辞書はメソッドを(持っている機能属性)。あなたが順番に独自の属性を持つオブジェクトは、あるプロパティにアクセスするとき、これは構成することも可能であるプロパティチェーンを以下のような:

>>> import sys
>>> sys.stdout.write('beginman')
beginman
>>> myMoudel.myClass.__doc__ 

クラスに関連付けられたクラス属性は、関係なく、例の、典型的には、データクラス属性は、クラスで定義された唯一の変数は、通常、静的変数または静的データと称される。他の言語の等価は、変数の前にstatic

>>> class C(object): foo = 100 # 定义类属性 >>> print C.foo # 访问类属性 100 >>> C.foo = C.foo+100 # 更新类属性 >>> C.foo 200 

上記の知識から、唯一のクラス属性とクラスのすべての半分のダイムのインスタンスに関連する(クラスはオブジェクトで、Pythonはクラスオブジェクトで言いました)。

>>> class C(object): foo = 100 # 定义类属性 >>> print C.foo # 访问类属性 100 >>> C.foo = C.foo+100 # 更新类属性 >>> C.foo 200 >>> c=C() # 实例化一个对象c >>> c.foo 200 >>> c.foo = 1000 # 实例试图修改类属性 >>> c.foo # 实例想看是否修改成功,于是就c.foo竟输出1000,于是实例就满以为自己成功了 1000 >>> C.foo # 类对象鄙夷的看了实例一样,说:“你就是老子生出来的,老子的东西你也能碰??” 200 >>> del c.foo # 实例看完之后当场傻眼,心想mlgb,你牛B,我还是除掉自己负担沉重的改造吧 >>> c.foo # 实例除掉了自己负担沉重的改造后,老老实实地调用类对象给的sb玩意 200 >>> # 通过类对象与实例关于类属性争权大战后,我们知道了一点: >>> #类属性仅仅与类(类也是对象,python中称类对象)相关,与实例半毛钱关系都没有。 >>> #如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。 >>> 

7、クラスメソッド?

>>> class C(object): foo = 100 def met(self): print 'i am method for class.' >>> C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩 Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩 TypeError: unbound method met() must be called with C instance as first argument (got nothing instead) >>> # 出大事了,方法竟然不同意还反抗了 >>> # 心想这是为什么呢?突然想到了原来是那鸟人Python >>> # 鸟人 Guido van Rossum 创造Python类给出的规定就是,你可以创类方法,但是不能调戏她。 >>> c=C() # 类心有不甘,于是创了实例小c来助纣为虐 >>> c.met() # 实例小c心想,mlgbd,上次想修改类属性就被你狠狠地鄙视了一番,现在又为难我,唉,命苦。无论如何试试吧 i am method for class. >>> # 龌龊,类方法竟然听我实例的,于是实例就赶紧找Guido van Rossum问什么情况 >>> # Guido van Rossum就说”为了与OOP惯例保持一致,没有实例就不能调用方法,这种限制就是Python所描述的绑定概念,方法必须绑定在实例中才听话,不能把权利都交给了类,这是老子对你实例的恩惠啊。“ >>> # 实例听完泪牛满面,类对象发怒了,说:”今天,我就要把我身上的所有零件(属性)都掏出来看看,看都有谁不听话!“ >>> dir(C) # 于是类对象使用第一招 dir()内建 ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'met'] >>> print C.__dict__ # 第二招就是召遣他最听话的属性 __dict__ 来揪出 {'__module__': '__main__', 'met': <function met at 0x0000000002D33EB8>, '__dict__': <attribute '__dict__' of 'C' objects>, 'foo': 100, '__weakref__': <attribute '__weakref__' of 'C' objects>, '__doc__': None} >>> 

クラスオブジェクトの輝き、例のターン後:

インスタンスの作成:
C ++やその他のプログラミングのアプリケーションを、オブジェクトのインスタンスがありNew、関数呼び出し部分的インスタンス化の形でPythonの牛B、だけでは同じ人、アウト。

class CC(object):
    #我是Python类默许的,没重写__init__,所以也没有什么特殊操作 pass class C(object): def __init__(self,name,phone,ID): super(C,self).__init__() self.name = name self.phone = phone self.id = ID print 'Hi man 我重写了__init__,因为我需要更多的操作' cc = CC() # 创建CC实例 c = C('BeginMan','110','12306') # 创建C实例 

キー:
クラスが呼び出されると、最初のステップは、オブジェクトのインスタンスを作成して、その後のPython実装するかどうかをチェックするインスタンス__init__()デフォルトによってオーバーライドされない場合、方法は、__init__特別な操作に適用されることはありません。特別な操作を書き換えする必要があります__init__
独自の定義に応じて、パラメータを渡すことによって、その後__init__、それはパラメータの数、カバーされたか否か、プロセスのインスタンスを渡すために必要なパラメータの数が含まれ__init__()、最初の引数として渡されたオブジェクトのすべてのインスタンスを。

__init__そして__new____call__違い:

__new__、より本物のコンストラクタのような呼び出しオブジェクトを作成し、それが現在のオブジェクトのインスタンスを返します。しかし、実際にはほとんど使用していました。
__init__:初期化、あなたが呼ばれるオブジェクトを作成するときに、例えば現在のオブジェクトが初期化され、戻り値なしPythonで非常に一般的。
__call__:ように別の関数にパラメータとして渡された関数となり、パフォーマンスの機能のようなクラスの行為のインスタンスは、あなたがそれらを呼び出すことができましょう、と。ほとんど使用されません。
優先順位:__new__最初と__init__

__del__デストラクタ・メソッド、「Pyのコア」を参照してください。

属性の例:

インスタンスを作成した後いつでも作成することができ、あなたは。「ランタイム」を作成することができ__init__()、これらの属性にキーポイントを作成します。

>>> c.__dict__  # 此时实例c还没属性
{}
>>> c.__class__ # 实例化的类 <class '__main__.C'> >>> c.foo=1 >>> c.name='CS' >>> c.__dict__ {'foo': 1, 'name': 'CS'} >>> dir(c) [***'foo', 'name'***,'__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 

Pythonの他の言語との類似点と相違点をオブジェクト指向?

同様の
「JavaのOOP」と「の違い
Python的OOP」? 以下の優れた英語の翻訳することができ本当にTMが発音するのは難しいです。

コンストラクタは何ですか、__init__それは何を意味するのでしょうか?それは何を意味するのでしょうか?

参照して、オブジェクト指向プログラミングのinitメソッド

一般的な用語OOP

これは、多くの場合、OOPの機能はそれほど明白ではない反映のためので、C ++ / Javaの/ C#、も過言ではないため、PythonのOOPの実用的なアプリケーションに、ソフトウェア工学に見られる OOPの思考が、それは非常に深い反射し、私はあまりにも多くの食べ物を持って、それが困難ですOOPの本質に精通。
一般的な用語の要約でオブジェクト指向プログラミング
をさらに含む、イントロスペクション

Pythonのイントロスペクション(反射)とは何ですか?

この記事では、Pythonを検討し、要約することを目指して:

1、どのようにクラスとインスタンスを作成するには?

# 创建类
class ClassName(object): """docstring for ClassName""" def __init__(self, arg): super(ClassName, self).__init__() self.arg = arg # 创建实例 instance = ClassName() 

2、クラシックと新しいクラスの違いは?

3.方法は何ですか?どのように定義するには?どのように使用するには?

この方法は、機能クラスである
クラス内で定義された
インスタンスにより呼び出され

4.どのような自己代表?どのような分野で使用されますか?

各クラスは、メソッドたselfパラメータ代表的なオブジェクト自体の例インスタンスメソッドが静か方法に移しインタプリタによって呼び出され、手動自己なしで来ます。
Pythonで自己がキーワードではありません。自己は、オブジェクトの現在のアドレスを表します。修飾されていないグローバル変数の呼び出しを避けるために、自己が発生します。
wangkangluo1 Pythonの理由を自己には非常に明確に言いました:

MyClassクラスを作成し、MyClassのは、インスタンス化されたMyObjectにオブジェクトは、そのオブジェクトのメソッドMyObject.method(ARG1、ARG2)、このプロセスを呼び出し、Pythonのは、自動的にMyclass.mehod(MyObjectに、ARG1、ARG2)に変換されます
どのPythonは、自己の原理です。あなたのメソッドは、パラメータのいずれかの種類を必要とするが、それでもこの方法に自己定義されたパラメータを持っていない場合であっても。

5、二つの動作クラスオブジェクト?

:生成されたオブジェクト・クラスのクラスを定義した後、クラスオブジェクトは、二つの動作サポートの参照および例
引用:クラスオブジェクトクラスのプロパティまたはメソッドを呼び出すために、例:クラス・オブジェクトのエンティティクラス・オブジェクト・インスタンス。

6. Pythonのクラスとインスタンスのプロパティとは何ですか?

プロパティは、別のオブジェクトへのデータ要素または機能です!例えば、このような複雑なPythonのいくつかのタイプのようなドット表記によるアクセスは、持っているデータの属性を、リスト、および辞書はメソッドを(持っている機能属性)。あなたが順番に独自の属性を持つオブジェクトは、あるプロパティにアクセスするとき、これは構成することも可能であるプロパティチェーンを以下のような:

>>> import sys
>>> sys.stdout.write('beginman')
beginman
>>> myMoudel.myClass.__doc__ 

クラスに関連付けられたクラス属性は、関係なく、例の、典型的には、データクラス属性は、クラスで定義された唯一の変数は、通常、静的変数または静的データと称される。他の言語の等価は、変数の前にstatic

>>> class C(object): foo = 100 # 定义类属性 >>> print C.foo # 访问类属性 100 >>> C.foo = C.foo+100 # 更新类属性 >>> C.foo 200 

上記の知識から、唯一のクラス属性とクラスのすべての半分のダイムのインスタンスに関連する(クラスはオブジェクトで、Pythonはクラスオブジェクトで言いました)。

>>> class C(object): foo = 100 # 定义类属性 >>> print C.foo # 访问类属性 100 >>> C.foo = C.foo+100 # 更新类属性 >>> C.foo 200 >>> c=C() # 实例化一个对象c >>> c.foo 200 >>> c.foo = 1000 # 实例试图修改类属性 >>> c.foo # 实例想看是否修改成功,于是就c.foo竟输出1000,于是实例就满以为自己成功了 1000 >>> C.foo # 类对象鄙夷的看了实例一样,说:“你就是老子生出来的,老子的东西你也能碰??” 200 >>> del c.foo # 实例看完之后当场傻眼,心想mlgb,你牛B,我还是除掉自己负担沉重的改造吧 >>> c.foo # 实例除掉了自己负担沉重的改造后,老老实实地调用类对象给的sb玩意 200 >>> # 通过类对象与实例关于类属性争权大战后,我们知道了一点: >>> #类属性仅仅与类(类也是对象,python中称类对象)相关,与实例半毛钱关系都没有。 >>> #如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。 >>> 

7、クラスメソッド?

>>> class C(object): foo = 100 def met(self): print 'i am method for class.' >>> C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩 Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> C.met() # C心想方法也是我的一部分,那么方法也是类属性*(这点很正确),于是我调用你玩玩 TypeError: unbound method met() must be called with C instance as first argument (got nothing instead) >>> # 出大事了,方法竟然不同意还反抗了 >>> # 心想这是为什么呢?突然想到了原来是那鸟人Python >>> # 鸟人 Guido van Rossum 创造Python类给出的规定就是,你可以创类方法,但是不能调戏她。 >>> c=C() # 类心有不甘,于是创了实例小c来助纣为虐 >>> c.met() # 实例小c心想,mlgbd,上次想修改类属性就被你狠狠地鄙视了一番,现在又为难我,唉,命苦。无论如何试试吧 i am method for class. >>> # 龌龊,类方法竟然听我实例的,于是实例就赶紧找Guido van Rossum问什么情况 >>> # Guido van Rossum就说”为了与OOP惯例保持一致,没有实例就不能调用方法,这种限制就是Python所描述的绑定概念,方法必须绑定在实例中才听话,不能把权利都交给了类,这是老子对你实例的恩惠啊。“ >>> # 实例听完泪牛满面,类对象发怒了,说:”今天,我就要把我身上的所有零件(属性)都掏出来看看,看都有谁不听话!“ >>> dir(C) # 于是类对象使用第一招 dir()内建 ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'met'] >>> print C.__dict__ # 第二招就是召遣他最听话的属性 __dict__ 来揪出 {'__module__': '__main__', 'met': <function met at 0x0000000002D33EB8>, '__dict__': <attribute '__dict__' of 'C' objects>, 'foo': 100, '__weakref__': <attribute '__weakref__' of 'C' objects>, '__doc__': None} >>> 

クラスオブジェクトの輝き、例のターン後:

インスタンスの作成:
C ++やその他のプログラミングのアプリケーションを、オブジェクトのインスタンスがありNew、関数呼び出し部分的インスタンス化の形でPythonの牛B、だけでは同じ人、アウト。

class CC(object):
    #我是Python类默许的,没重写__init__,所以也没有什么特殊操作 pass class C(object): def __init__(self,name,phone,ID): super(C,self).__init__() self.name = name self.phone = phone self.id = ID print 'Hi man 我重写了__init__,因为我需要更多的操作' cc = CC() # 创建CC实例 c = C('BeginMan','110','12306') # 创建C实例 

キー:
クラスが呼び出されると、最初のステップは、オブジェクトのインスタンスを作成して、その後のPython実装するかどうかをチェックするインスタンス__init__()デフォルトによってオーバーライドされない場合、方法は、__init__特別な操作に適用されることはありません。特別な操作を書き換えする必要があります__init__
独自の定義に応じて、パラメータを渡すことによって、その後__init__、それはパラメータの数、カバーされたか否か、プロセスのインスタンスを渡すために必要なパラメータの数が含まれ__init__()、最初の引数として渡されたオブジェクトのすべてのインスタンスを。

__init__そして__new____call__違い:

__new__、より本物のコンストラクタのような呼び出しオブジェクトを作成し、それが現在のオブジェクトのインスタンスを返します。しかし、実際にはほとんど使用していました。
__init__:初期化、あなたが呼ばれるオブジェクトを作成するときに、例えば現在のオブジェクトが初期化され、戻り値なしPythonで非常に一般的。
__call__:ように別の関数にパラメータとして渡された関数となり、パフォーマンスの機能のようなクラスの行為のインスタンスは、あなたがそれらを呼び出すことができましょう、と。ほとんど使用されません。
優先順位:__new__最初と__init__

__del__デストラクタ・メソッド、「Pyのコア」を参照してください。

属性の例:

インスタンスを作成した後いつでも作成することができ、あなたは。「ランタイム」を作成することができ__init__()、これらの属性にキーポイントを作成します。

>>> c.__dict__  # 此时实例c还没属性
{}
>>> c.__class__ # 实例化的类 <class '__main__.C'> >>> c.foo=1 >>> c.name='CS' >>> c.__dict__ {'foo': 1, 'name': 'CS'} >>> dir(c) [***'foo', 'name'***,'__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 

Pythonの他の言語との類似点と相違点をオブジェクト指向?

同様の
「JavaのOOP」と「の違い
Python的OOP」? 以下の優れた英語の翻訳することができ本当にTMが発音するのは難しいです。

コンストラクタは何ですか、__init__それは何を意味するのでしょうか?それは何を意味するのでしょうか?

参照して、オブジェクト指向プログラミングのinitメソッド

一般的な用語OOP

これは、多くの場合、OOPの機能はそれほど明白ではない反映のためので、C ++ / Javaの/ C#、も過言ではないため、PythonのOOPの実用的なアプリケーションに、ソフトウェア工学に見られる OOPの思考が、それは非常に深い反射し、私はあまりにも多くの食べ物を持って、それが困難ですOOPの本質に精通。
一般的な用語の要約でオブジェクト指向プログラミング
をさらに含む、イントロスペクション

Pythonのイントロスペクション(反射)とは何ですか?

おすすめ

転載: www.cnblogs.com/cmybky/p/11772708.html