クラスのオブジェクト指向メンバー1--

クラスのオブジェクト指向メンバー1--

オブジェクト指向三つの特徴:1.パッケージ2. 3.多型の継承

行うことができますオップは、コード、コードの冗長性を打破し、既存のコードを最小化してからではなく、コードフィールドを変更するよりも、カスタムプログラムを書く、あるいはゼロからスタートです

まず、クラスのメンバー:

分野:通常のフィールド、静的フィールド

2.方法:一般的な方法、クラスメソッド、静的メソッド

3. [プロパティ

class Person:
    country = 'CN'     #静态字段
    __money = 99999                    #私有静态字段
    def __init__(self,name):
        self.name = name     #普通字段
        self.__age = 30                #私有普通字段
    def show(self):        #普通方法
        self.__think()
        return self.__age
    @classmethod           #类方法
    def cls_func(cls):
        return cls.__money
    @staticmethod
    def static_func():
        return  123
    @property
    def nature(self):    #属性
        return '鸽子' 
    def __think(self):       #私有方法
        return '画个圈圈'
           

静的フィールドは、メモリ内の一つだけを残して、クラスに属します

一般的なフィールドは、各オブジェクトがそれぞれに保存され、オブジェクトに属します

一般的な方法は、オブジェクトによって呼び出され、自己の少なくとも1つのパラメータを含むオブジェクトに属します

クラスメソッドの呼び出しによってクラス、含む少なくとも1つのパラメータCLS、

静的なクラスメソッドは、パラメータなしの自己と呼ばれていません

プロパティデコレータを使用して、上記定義された2つの形式があり、以下の実施形態は、静的フィールドです

def nature(self):
    return '鸽子'
na = property(nature)

公私

プライベート静的フィールドは、__money = 99999, 错误:Person.__money間接的な方法でアクセスすることができ、

プライベートフィールド、self.__age = 30,错误:obj.__age

プライベートメソッド、エラー:OBJ .__(だと思います)

*シモンズ:オブジェクト._クラスをすることができます、プライベートプロパティにアクセスする必要が__属性名* obj._Person__money

自己

自己は、通常、クラスのメソッドへの最初のパラメータの名前は、Pythonは自動的に場所が鍵であり、(つまり、暗黙的にmainメソッドの呼び出し)、自己と呼ばれていなくてもオブジェクトのインスタンスに入力されます。

第二に、特別会員(一部)

__init__    __str__     __call__   __add__   __dict__   __doc__    __name__
__getitem__    __setitem__   __delitem__
__getattr__    __setattr__

class A:
    '''nothing....'''
    def __init__(self,data):    
       self.data = data
    def __str__(self,data):
        return self.data
    def __call__(self):
        print('Hellow')
    def __add__(self,other):
        return self.data + other       

__init__ #コンストラクタは、各インスタンスが作成されると、Pythonは自動的にそれを呼び出します、明示的に渡されたパラメータに加えて、クラスだけでなく、目に見えない、着信新しいインスタンスに名前を付けます。

__str__ あなたがオブジェクトを印刷したい場合には、実行しています__str__

__add__ オブジェクトが実行され、「+」という表現に表示されます__add__

__call__ オブジェクトが呼び出されると、実行されます__call__

__dict__すべてのメンバーは、すべてのクラスやオブジェクトの辞書を返します

__doc__ クラスの記述情報に戻ります

__name__ クラスの名前を返します。

a = A(1)
print(a)        # A
a()             # Hellow
print(a + 2)    #  3
print(a.__dict__)    # {'data': 1}    
print(a.__doc__) #nothing...
print(a.__class__.__name__)   # A

定義されていない__dict____doc__、なぜ与えられていませんか?、しかし、また、すべてのクラスがデフォルトのオブジェクト;:クラスA(オブジェクト)を継承するため 、 再定義は、元の関数を上書きし、意味がありません。

class B:
    def __init__(self,number):
        self.number = number
        self.dic = {'k1':1,'k2':2,'k3':3,}   
    def __getitem__(self, key):
        return self.dic[key]
    def __setitem__(self, key, value):
        self.dic[key] = value
    def __delitem__(self, key):
        del self.dic[key]
b =B(88)
n = b['k1']   #触发 __getitem__
print(n)   # 1
b['k4'] = 4  #触发 __setitem__
print(b.dic)  #{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
del b['k2'] #触发__delitem__
print(b.dic)  #{'k1': 1, 'k3': 3, 'k4': 4}       

class C:
    pass        
c = C()
c.name = 'Sroxi'
print(c.name)  # Sroxi

クラスCは、任意の定義されずに、c.name =「Sroxi」を実現する方法ですか?

-オブジェクトのトリガー__setattr__メソッドを、サブクラスは同じを書き換えるしても意味がありません。

class Foo:
    def __init__(self):
        object.__setattr__(self, 'info', {})  #在对象中设置值的本质,注意:这里info带引号
    def __setattr__(self, key, value): 
        #c.name = 'Sroxi',触发该方法,在object中有字典这样的容器进行接收
        self.info[key]=value
    def __getattr__(self, item): 
        #c.name触发该方法,将字典中的对应的value进行返回
        return self.info[item]

おすすめ

転載: www.cnblogs.com/notfind/p/11565257.html