ホームページ  >  記事  >  バックエンド開発  >  Pythonのクラスとは何ですか

Pythonのクラスとは何ですか

藏色散人
藏色散人オリジナル
2019-06-24 11:25:204660ブラウズ

Pythonのクラスとは何ですか

Python のクラスとは何ですか?

は、カテゴリまたはタイプの同義語と見なすことができます。すべてのオブジェクトは特定のクラスに属しており、そのクラスのインスタンスと呼ばれます。

例: Bird は「bird」のインスタンスです。これは、多くのサブクラスを持つ単なる一般的な (抽象) クラスです。あなたが見ている鳥は、サブクラス「ヒバリ」に属している可能性があります。 「鳥」はすべての鳥の集合であり、「ヒバリ」はその一部であると考えてください。オブジェクトが属するクラスが別のオブジェクトが属するクラスのサブセットである場合、前者は後者のサブクラスと呼ばれます。したがって、「ヒバリ」は「鳥」のサブクラスであり、「鳥」は「ヒバリ」です。 "bird" の

#サブクラスの定義は、さらにメソッドを定義するプロセスです。

クラスを作成します

>>> class Person:    def setName(self,name):
        self.name=name    def getName(self):        return self.name    def greet(self):        print "Hello,world! I'm %s" % self.name        
>>> foo=Person()>>> bar=Person()>>> foo.setName('Nsds')>>> bar.setName('Ysdy')>>> foo.greet()
Hello,world! I'm Nsds>>> bar.greet()
Hello,world! I'm Ysdy

foo の setName を呼び出すときgreet 関数を使用すると、foo は自動的に自分自身を最初のパラメーターとして関数に渡すため、self という名前が付けられます。 self がないと、メンバー メソッドはプロパティを操作するオブジェクト自体にアクセスできません。

プロパティは外部からアクセスできます:

>>> foo.name'Nsds'>>> bar.name='Yoda'>>> bar.greet()
Hello,world! I'm Yoda

プロパティ、関数、メソッド

self パラメータは実際にはメソッドと関数の違いです。メソッドは最初のパラメータを対応するインスタンスにバインドするため、このパラメータを指定する必要はありません。したがって、プロパティを通常の関数にバインドできるため、特別な自己パラメータはありません:

(特性はオブジェクト内の変数です。オブジェクトの状態はそのプロパティによって記述されます。オブジェクトのメソッドを使用できます。特性を変更し、オブジェクトの外部から特性に直接アクセスします)

>>> class Class:    def method(self):        print 'I have a self!'

        >>> def function():    print "I don't...">>> s=Class()>>> s.method()
I have a self!>>> s.method=function>>> s.method()
I don't...

変数birdsong参照は、メソッドbird.singにバインドされるか、selfパラメータにアクセスします(クラスの同じインスタンスにバインドされたままです)。

>>> class Bird:
    song='Squaawk'
    def sing(self):        print self.song        
>>> bird=Bird()>>> bird.sing()
Squaawk>>> birdsong=bird.sing>>> birdsong()
Squaawk

名前の前に二重アンダースコアを追加すると、メソッドまたは機能がプライベート (外部からアクセスできなくなります) になる可能性があります。

>>> class Secretive:    def __inaccessible(self):        print "Bet you can't see me..."
    def accessible(self):        print "The secret message is:"
        self.__inaccessible()        
>>> s=Secretive()>>> s.__inacessible()

Traceback (most recent call last):
  File "<pyshell#182>", line 1, in <module>
    s.__inacessible()
AttributeError: &#39;Secretive&#39; object has no attribute &#39;__inacessible&#39;>>> s.accessible()
The secret message is:
Bet you can&#39;t see me...

クラスの内部定義では、二重アンダースコアで始まる名前はすべて Is " です。翻訳済み」を、先頭に 1 つのアンダースコアとクラス名を付けた形式に変換します。

>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible>
>>> s._Secretive__inaccessible()
Bet you can&#39;t see me...

クラスの名前空間

クラスを定義する場合、class ステートメントにあるすべてのコードは特別な名前空間にあります。 --- クラスの名前空間。この名前空間には、クラスのすべてのメンバーがアクセスできます。

クラスの定義は実際には実行コード ブロックです

>>> =+=1

        
>>> m1=>>>>>>1
>>> m1.members=2
>>>2
>>> m2=>>>>>>2
>>>>>>3
>>>2
>>>

新しいメンバーの値は m1 の特性に書き込まれ、クラス スコープ内の変数を保護します

Super class

>>> class Filter:    def init(self):
        self.blocked=[]    def filter(self,sequence):        return [x for x in sequence if x not in self.blocked]    
>>> class SPAMFilter(Filter):    def init(self):
        self.blocked=[&#39;SPAM&#39;]        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])
[1, 2, 3]>>> s=SPAMFilter()>>> s.init()>>> s.filter([&#39;SPAM&#39;,&#39;SPAM&#39;,&#39;egg&#39;,&#39;name&#39;,&#39;ff&#39;])
[&#39;egg&#39;, &#39;name&#39;, &#39;ff&#39;]

継承、スーパークラス

>>> class Filter:    def init(self):
        self.blockes=[]    def filter(self,sequence):        return [x for x in sequence if x not in self.blocked]    
>>> class S(Filter):    def init(self):
        self.blocked=[&#39;s&#39;]        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])

複数のスーパークラス

最初に継承されるクラスのメソッドは、後で継承されるクラスのメソッドをオーバーライドします

>>> class C():    def calculate(self,expression):
        self.value=eval(expression)        
>>> class Talker():    def talk(self):        print &#39;Hi,my value is&#39;,self.value        
>>> class TalkingCalculator(C,Talker):    pass>>> tc=TalkingCalculator()>>> tc.calculate(&#39;1+2*3&#39;)>>> tc.talk()
Hi,my value is 7

関連の推奨: 「Python チュートリアル

以上がPythonのクラスとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。