Pythonのオブジェクト


自分のオブジェクトを作成することはPythonの核心概念の一つです.Pythonはオブジェクト向け言語と呼ばれています.
(1)独自のクラスを作成する方法.selfパラメータによってオブジェクトに具体的にバインドされるため、一般クラスのメンバー関数にはselfパラメータがあります.クラスの作成方法:
          obj = ClassType()
class person:
    def setName(self,name):
        self.name=name
foo = person()
foo.setName('lsj')
person.setName(foo,'lsj') ##            ,          
print (foo.name)

【注】インスタンスを呼び出すと、このメソッドのselfパラメータは、インスタンスに自動的にバインドされます.すなわちfoo.setName('lsj')文のfooオブジェクトはsetNameのselfパラメータに自動的にバインドされます.すなわち、クラスのメンバー関数をインスタンスで呼び出すなければ、selfにパラメータがバインドされず、selfパラメータを提供する必要があるためperson.setName(foo,‘lsj’)は上述した機能と同じである.
【注】クラスを介して直接クラスを呼び出す方法を、バインドされていない方法と呼ぶ.
(2)変数はクラスのメソッドにバインドすることができ,このPython特有である.
class Bird:
    song = 'love'
    def sing(self):
        print (self.song+'!')
bird = Bird()
bird.sing()
birdsong = bird.sing
birdsong()
>>>love!
love!

(3)スーパークラスを指定し,同時に複数のスーパークラスを持つことができる.多重継承の場合,各スーパークラスの順序に注意する.スーパークラスに同じ名前のメンバーがある場合、継承リストの前のスーパークラスが後ろのスーパークラスを上書きするからです.
class Calculator:
    def cal(self,exp):
        self.value = eval(exp)
class Talker:
    def talk(self):
        print ('Hi,my value is',self.value)
class TalkingCal(Calculator,Talker):
    pass #   
tc = TalkingCal()
tc.cal('1+3*3')
tc.talk()
>>>Hi,my value is 10

(4)クラスのメンバーがどのようにプライベートに変換されるかは,クラスのメンバー関数または属性名の前に二重下線を付けることでプライベートに変換できる.具体的にはPythonが下線のメンバーの名前を変更し、1つ追加しました.Secretive.
class PrivateClass:
    def __privateFunc(self):
        print ('Private func')

    def publicFunc(self):
        self.__privateFunc()
        print ("Public func")
obj = PrivateClass()
obj.publicFunc()
>>>Private func
Public func

(5)クラスのネーミングスペース
オブジェクトの空間はクラスの共通空間を遮蔽することができる.
class MemberCounter:
    members = 0
    def init(self):
        MemberCounter.members += 1 #       

obj1 = MemberCounter()
obj2 = MemberCounter()
obj1.init()
obj2.init()
print (obj1.members) #    MemberCounter      members
print (obj2.members) #    MemberCounter      members
obj1.members = 4  #obj1 members   MemberCounter    members
print (obj1.members) #    obj1    members  
print (obj2.members) #  MemberCounter     members,     
>>>2
2
4
2

(6)いくつかの有用な関数
        __bases__ プロパティは、クラスのスーパークラスを求めることができます.
class Father:pass
class Son(Father):pass
print (Son.__base__)      
>>><class '__main__.Father'>

__class__ プロパティ、オブジェクトがどのクラスに属するか
class Object:pass
obj = Object()
print (obj.__class__)   
>>><class '__main__.Object'>	

callable(object)オブジェクトが呼び出されるかどうかを決定する
getattr(object,name[,default])は、プロパティの値を決定し、デフォルト値の提供を選択します.
hasattr(object,name)オブジェクトに所定の属性があるかどうかを決定する
isinstance(object,class)オブジェクトがクラスのインスタンスであるかどうかを決定する
issubclass(A,B)AがBのサブクラスであるか否かを決定する
        random.choice(sequence)非制御シーケンスから要素をランダムに選択
setattr(object,name,value)オブジェクトの所与の特性を設定するvalue
type(object)はオブジェクトのタイプを返します