Pythonのインスタンス属性とクラス属性、クラスメソッド、静的メソッドとインスタンスメソッド

クラスとインスタンスのプロパティ

  • クラスのプロパティ:Pythonで、私たちはクラスに直接アクセス属性することができますが、パブリックとプライベートクラスに分けることができるクラス(Javaでの静的メンバ変数など)の属性、パブリックプロパティに直接アクセスし、私有財産から渡す必要があります属性getおよびsetメソッド定義されたアクセス(オブジェクトは、getとsetメソッドを呼び出すために)。
  • 属性の例:オブジェクト(クラスによって作成されたオブジェクト)が所有するプロパティのインスタンスは、クラス名を介して直接アクセスすることはできません。オブジェクトが外部のプロパティ(オブジェクトのプロパティは、クラス内にカプセル化されなければならないので、推奨、または暗黙的なエラーの数の傾向がない)に直接添加することができ、このプロパティは、インスタンスのプロパティとして知られています。一般に、この方法は、インスタンス属性が初期化される__init()(Javaで同様の工法)渡されたパラメータによって内部的に定義され、割り当てます。
  • オブジェクトがインスタンス化されたときに、メモリの割り当ては、空間オブジェクトを与えるので、この空間の性質そのものにアクセスするには、このクラスのプロパティはクラスオブジェクトであるように、オブジェクトのアクセスクラスのプロパティは、元のクラスの属性に影響を与えないであろうことに留意すべきです(コピーに相当)は、そう元のクラスに影響を与えることができないオブジェクトから直接クラス属性を変更します。
class people:
   name = "tom"  # 类属性
   __height = 180

   def __init__(self, age):
       self.age = age  # 实例属性
   def getHeight(self):
       return self.__height
   def setHeight(self,height):
       self.__height = height

print("通过类名访问:" + people.name)
p = people(20)
p.name="max"
p.setHeight(190)
print("通过对象访问:%s %d %d"%(p.name,p.age,p.getHeight()))
print("通过类名访问:" + people.name) #p.name="max"并没有影响到原类属性

結果:
ここに画像を挿入説明

クラスメソッド、静的メソッドとインスタンスメソッド

  • クラスメソッド:メソッドクラスオブジェクト所有、必要デコレータ@classmethod識別、最初のパラメータは、一般的に、クラスオブジェクトでなければならないcal最初のパラメータとして(あなたが呼び出すことができませんもちろんcal、それだけの習慣や規範です)、インスタンスオブジェクトとオブジェクト(クラス名)を介してアクセスすることが可能。クラスメソッドは、クラス属性の値を変更するオブジェクトインスタンス(既に上述したように、クラス属性値のオブジェクトのインスタンスを直接変更することはできない)可能
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性

   @classmethod
   def setName(cls,name):
       cls.name=name

p=people(20)
p.setName("max")
print(people.name)

結果:
ここに画像を挿入説明

  • 方法の例:所有するオブジェクトのメソッドのインスタンスは、(呼び出し元のクラス名によって直接ではなく)クラスオブジェクトにアクセスすることはできません。最初の引数は、一般的に、オブジェクトのインスタンスでなければならないself最初のパラメータとして(同じトークン、あなたは呼び出すことはできませんself、例により、呼び出しを受け、それはちょうど習慣や規範です、)。
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性
   def showAge(self):
       print("年龄:%d"%(self.age))

p=people(20)
p.showAge()

結果:
ここに画像を挿入説明

  • 静的メソッド:デコレータの必要性@staticmethod、正常な機能として使用するパラメータを定義する必要はありません。
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性

   @staticmethod
   def showAge():
       print("姓名:"+people.name)

people.showAge()
p=people(20)
p.showAge()

結果:
ここに画像を挿入説明

公開された11元の記事 ウォン称賛16 ビュー1826

おすすめ

転載: blog.csdn.net/qq_44204959/article/details/105193797