Pythonオブジェクト


evernote接続:https://app.yinxiang.com/shard/s7/sh/a79f4403-3594-4142-99c4-e57495d70646/ae22ad3c1ce2e9dd
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
Created on 2014年12月31日
@author: cuckoocs
'''
'''
メモ1:
isを使用して同じオブジェクト参照かどうかを判断する
==を使用して値が同じかどうかを判断
タイプが同じかどうかをtypeで判断する
    
Python可変オブジェクト:タプル、数値型、文字列(string)
Python可変オブジェクト:辞書型(dict)とリスト型(list)
Pythonには、参照が変更されていないオブジェクトがいくつか存在します[Pythonでは整数と文字列に対してメモリで変更されていません]
    {
        >>> i = 2
        >>> i2 = 2
        >>> i is i2
        True
        
        >>> s = 'uiui'
        >>> s2 = 'uiui'
        >>> s is s2
        True
        
#浮動小数点数参照が変化
        >>> t = 2.3
        >>> t2 = 2.30
        >>> t is t2
        False
        >>> t2 = 2.3
        >>> t is t2
        False
        >>> t == t2
        True
        >>> y = (1,2)
        >>> y2 = (1,2)
        >>> y is y2
        False
        >>> 1.0 is 1.0
        True
        >>> f1 = 1.0
        >>> f1 is 1.0
        False
    }
メモ2:
判断対象タイプはtypeとisinstanceを使用できます
typeは継承タイプを認識できません
isinstance(object,type)は継承を判断できる
メモ3:
sysを使用する.getrefcountはオブジェクトの参照回数を取得できます
メモ4:
copyモジュールによる浅いコピーと深いコピー
浅いコピー:オブジェクト内の参照は依然として参照です.
深度コピー:元のメモリデータをコピー
メモ5:
Pythonのすべてのオブジェクトは第1のオブジェクトです.関数、モジュール、例外など、名前を付けることができるすべてのオブジェクトをデータとして処理できます.
    {
a[1]=abs#関数
        a[1](-9)
    }
メモ6:
シーケンスに対するスライス[1:8]は1を含むが、8を含まない(左閉右開)
xrangeとrangeについても同様に左閉右開の原則を用いる
メモ7:
Pythonにはsetとfrozensetの2つの集合があり、setは可変、frozensetは可変である
setコレクションの場合、forループを使用する場合はループしながら削除することはできません
コレクションに重複は存在しません
メモ8:
≪ファンクション|Function|ldap≫:個別定義(クラス外で定義)
メソッド:クラスで定義
メモ9:
Pythonクラスには3つのメソッド,インスタンスメソッド,クラスメソッド,静的メソッドがある.
インスタンスメソッドはインスタンス呼び出しによって定義され、selfパラメータがインスタンス自体を表すように渡されます.
クラスメソッドはクラス呼び出し、@classmethod宣言を使用して定義時にclsパラメータを渡してクラスオブジェクトを表します.
静的メソッドはクラスにパッケージされた関数です.@staticmethod宣言を使用します.
メモ10:
#バインド方法
cls=mlist(1)#インスタンスの作成
    mth = cls.instance_method#インスタンスバインドメソッドを使用する場合、インスタンスをバインドします.ここではカッコ付きでもカッコなしでもかまいません.カッコ付きの場合、次の呼び出しはカッコなしで名前を直接使用して呼び出すことができます.パラメータを渡す必要がある場合はカッコなしで呼び出すことが望ましいことに注意してください.
mth(1)#メソッド呼び出し
    
#バインドされていないメソッド
    mth = mlist.instance_method#はクラスバインドによって、インスタンスをバインドしていません.呼び出し時にインスタンスを渡す必要があります.
    mth(cls)
メモ11:
selfを参照する.で定義します.init__()類同構造方法
メモ12:
Pythonでアクセス権を制御する方法
属性とメソッドを定義するときに'_'を使用します.接頭辞は使用されず、''は使用されません.接尾辞、プライベート変数またはメソッドとして定義
ただし、インスタンスは使用できます.クラス名_属性名[メソッド名]//クラス名.クラス名_属性名[メソッド名]アクセスインスタンスプライベート属性とクラスプライベート属性
    
Pythonで'_を使用xx__'のメソッドを組み込みメソッドとプロパティとして定義します.
メモ13:
Pythonの内蔵タイプ
'''
import sys
import copy
star_30 = '*'*30
class mlist(list):
    '''
             list
    '''
    mfield = {'info':'mlist'}
    __sy__ = 'private'
    
    def __init__(self, h=None, w=None):
        self._h = h
        self._w = w
        self.__t = 0
        
        
    def __pri_fun(self):
        print '__pri_fun__'
    
    
    def __call__(self, h=None):
        print 'call method'
    
    def instance_method(self, f=None):
        print 'instance method'
    
    @classmethod
    def class_method(cls):
        print 'class method'
        pass
    
    @staticmethod
    def static_method():
        print 'static method'
        pass
    
def compare(objA, objB):
    print star_30
    if objA is objB:
        print 'is the same object'
        
    if objA == objB:
        print 'value is same'
        
    if type(objA) is type(objB):
        print 'type is same'
def detect_type(obj):
    print star_30
    ot = type(obj)
    print ot
    print 'is list {}. type'.format(ot is mlist)
    print 'is list {}. isinstance'.format(isinstance(obj, list))
if __name__ == '__main__':
    #      
    cls = mlist(1)   #    
    mth = cls.instance_method #         ,       ,               ,                             ,                
    mth()          #    
    #  2
    mth = cls.instance_method(1)
    mth
    
    #     
    mth = mlist.instance_method #     ,      ,            
    mth(cls)
    
    cls.__call__()  #  ‘__’               ,  
    #cls.__pri_fun()
    cls._mlist__pri_fun() #      
    
    print mlist.__sy__
    #print cls.__t
    print cls._mlist__t #               
    print cls.__class__
    print cls.__dict__['_h']