27日目のオブジェクト指向サプリメント

 でisinstance(OBJ、CLS)オブジェクトobjがCLSの派生クラスのインスタンスであるか否かを判断します

issubclass(サブ、スーパー)か否かをサブクラスがスーパークラスのサブクラスであると判断

__getattr__プロパティへのアクセスは__getattr__をトリガ、存在しません。

__getattribute__かかわらず、プロパティがあるかどうかの__getattribute__トリガされます

例デルF1がトリガ[ '名前']のように角括弧[]辞書方法によって__setitem__、__delitem__、__getitem__、

点を通る__setattr__、delattr__、__getattr__、例えばデルf1.nameようにトリガする方法

 

### __ str__、__repr__全ての制御出力、出力戻り値は文字列を返すことができ、文字列は、ノンリターンではありません

Fooクラス:

        デフ__str __(自己):

              リターンは#制御情報を印刷することができ、「1カスタマイズ」

F1 =はFoo()

印刷(F1)#基本的にSTR(F1)、f1は実際に呼び出さ.__ strの__()

>>>カスタム1

 

Fooクラス:

        デフ__init __(自己、氏名、年齢)

              self.name =名前

              self.age =年齢

        デフ__repr __(自己):

              リターン%(self.name、self.age)#__repr__トリガインタプリタ "名は%sの年齢%sのです"

F1 =はFoo( 'エゴン'、19)#トリガ__repr__

印刷(F1)

>>>名前エゴン年齢19 

 

何__str__は、その後__repr__を転送しない場合は__str__、__repr__印刷優先順位は、共存__str__を呼び出す#

 

###形式のカスタム書式の方法

#####

X = {0} {0} - {0} 'の文字列内の位置に対応するフォーマット( '犬')#デジタル表現形式。

プリント(X)

>>>犬:犬、犬

##### 2

クラス日:

    デフ __init __(自己、年、月、日):

        self.year =年

        self.mon =私の

        self.day =日

D1 =日(2016,9,27)

 

X = "{0.year} {0.mon} {0.day}" .format(D1)

Y = '{0.year}:{0.mon}:{0.day} .format(D1)

Z = {0.mon} - {0.day} - {0.year} .format(D1)

プリント(X)

プリント(Y)

プリント(Z)

 

>>>

20161226

2016:12:26

2016年12月26日

 

#####サプリメント

そうでない場合 0:

    印刷("OK"

>>> OK

 

ない場合は 1:

    印刷("OK"

>>>

##### 3

format_dic = {

    'YMD' '{0.year} {0.mon} {0.day}'

    'MD-Y' '{0.mon} - {0.day} - {0.year}'

    'Y:M:D' '{0.year}:{0.mon}:{0.day}

}

クラス日:

    デフ __init __(自己、年、月、日):

        self.year =年

        self.mon =私の

        self.day =日

    デフ __format __(自己、format_spec):

        印刷(私はそれを実行します

        印刷('--->'、format_spec)

        ない場合 format_spec:ときformat_spec不在でない場合は##これが決定します

            = format_spec 「YMD」  #のformat_spec存在する場合ではない、ここで設定したデフォルト値

        FM = format_dic [format_spec]

        リターン fm.format(自己)

D1 =日(2016,12,26)

フォーマット(D1) 呼び出しD1 .__ format__

プリント(フォーマット(D1))

>>>

私は#実行形式(D1)、それを実行します

--->    

私はそれが#印刷を実行実行する(フォーマット(D1))

---> 

20161226 

 

キー値はformat_specが辞書にない追加#####第四に、または format_spec でない format_dic: 

    デフ __format __(自己、format_spec):

        印刷(私はそれを実行します

        印刷('--->'、format_spec)

        そうでない場合 format_spec format_spec ではない format_dic: 

            format_spec = 'YMD'

        FM = format_dic [format_spec]

        リターン fm.format(自己)

D1 =日(2016,12,26)

プリント(フォーマット(D1、'Y:M:D' ))

印刷(フォーマット(D1、"ajkdla" ))

 

>>>

Iラ#が実行プリント(フォーマット(D1、実行'Y:M:Dを'))

---> Y:M:D

2016:12:26

私は#実行印刷(フォーマット(D1、実行する「ajkdla」キーが辞書の値ではない場合、))、すなわちformat_spec

---> ajkdla

20161226

 

######## __ slots__:メモリ使用量を節約するために、追加の制限はカスタマイズされた割り当てに__slots__良いキーで使用できる属性を定義し

__slots __:,,,,()

なぜ__slots__:__dict__あなたはクラスのいくつかの属性を持っている場合、辞書には、大量のメモリを占有しますが、多くの例がありますが、メモリを節約するために__slots__インスタンスを置き換えるために使用することができます

 

クラス Fooの:

    __slots__ = [ '名前''時代' ]

    デフ XYY(自己):

        パス

 

F1 =はFoo()

f1.name = 'XYY'

f1.age = 18

### __プロパティを継承することはできませんdoc__内の例題は、自動割り当てなしを定義しません

クラス Fooの:

    私は学習にはまっ女の子よ

    パス

 

F1 =はFoo()

印刷(F1 .__ doc__内の例題)

>>>私は学習にはまっ女の子よ

### __ class__、__module__クラス名とモジュール名属性が属し表示

デルとの属性を削除しようとしたときに### __ del__は実行__del__をトリガー

__call__実行をトリガーするオブジェクトの背後にある### __ call__ブラケット、。

 

クラス Fooの:

    デフ __call __(自己):

       印刷(私は実行して

       

F1 =はFoo()

F1() コールはFoo__call__

Foo() 呼び出しがある***__call__すべてが対象であるため、

###イテレータプロトコル:オブジェクトが__iter__がクラスに追加、反復法の対象となり、戻り値を呼び出す__next__

 

クラス Fooの:

    デフ __init __(自己、N):

        self.n = N

    デフ __iter __(自己):

        リターン自己

    デフ __next __(自己):

        もし self.n == 15:

            昇給を呼び出すとStopIteration("N- 最大15"

        self.n + = 1

        リターン self.n

F1 =フー(10)

プリント(F1 .__次に__()) のF1()即ちターゲットブラケットとのFooクラスが有する__iterの__()と、反復子になる__next__戻り値を

プリント(次の(F1))

 

I F1:  #forサイクルはイテレータプロトコルすなわち以下OBJ = ITER(F1)を、F1 .__ ITER __()

    印刷(I)  呼び出すことに相当し(__ __next)

 

####変数の値の代入

= 2

B = 1

C、D = B、Cに割り当てられた#Bを、AがDに割り当てられています

プリント(C、D)

>>> 1 2

 

番号列の出力Feibonaci反復子###

クラス Fooの:

    デフ __init __(自己、X = 0、Y = 1):

        self.x = X

        self.y = Y

    デフ __iter __(自己):

        リターン自己

    デフ __next __(自己):

        self.x、self.y = self.y、self.x + self.y

        もし self.y> = 100:

           昇給を呼び出すとStopIteration(「100 内の列のFeibonaci番号

        リターン self.y

 

 

F1 =はFoo()

 

以下のための F1:

    プリント(I)

 

おすすめ

転載: www.cnblogs.com/xuwinwin/p/11614176.html