Pythonのオブジェクト
自分のオブジェクトを作成することはPythonの核心概念の一つです.Pythonはオブジェクト向け言語と呼ばれています.
(1)独自のクラスを作成する方法.selfパラメータによってオブジェクトに具体的にバインドされるため、一般クラスのメンバー関数にはselfパラメータがあります.クラスの作成方法:
obj = ClassType()
【注】インスタンスを呼び出すと、このメソッドのselfパラメータは、インスタンスに自動的にバインドされます.すなわちfoo.setName('lsj')文のfooオブジェクトはsetNameのselfパラメータに自動的にバインドされます.すなわち、クラスのメンバー関数をインスタンスで呼び出すなければ、selfにパラメータがバインドされず、selfパラメータを提供する必要があるためperson.setName(foo,‘lsj’)は上述した機能と同じである.
【注】クラスを介して直接クラスを呼び出す方法を、バインドされていない方法と呼ぶ.
(2)変数はクラスのメソッドにバインドすることができ,このPython特有である.
(3)スーパークラスを指定し,同時に複数のスーパークラスを持つことができる.多重継承の場合,各スーパークラスの順序に注意する.スーパークラスに同じ名前のメンバーがある場合、継承リストの前のスーパークラスが後ろのスーパークラスを上書きするからです.
(4)クラスのメンバーがどのようにプライベートに変換されるかは,クラスのメンバー関数または属性名の前に二重下線を付けることでプライベートに変換できる.具体的にはPythonが下線のメンバーの名前を変更し、1つ追加しました.Secretive.
(5)クラスのネーミングスペース
オブジェクトの空間はクラスの共通空間を遮蔽することができる.
(6)いくつかの有用な関数
__bases__ プロパティは、クラスのスーパークラスを求めることができます.
__class__ プロパティ、オブジェクトがどのクラスに属するか
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)はオブジェクトのタイプを返します
(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)はオブジェクトのタイプを返します