クラスとインスタンスのプロパティ
- クラスのプロパティ: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()
結果: