クラスのプロパティ
次のコードのように:
class Person:
name = "张三" # 共有类属性
__age = 18 # 私有类属性
直接クラス属性、クラスの属性である定義されたオブジェクトのすべてのインスタンスに共通です。
総クラス属性は、クラス外部オブジェクトのクラス・オブジェクト・インスタンスを介してアクセスすることができます。
例えば:
class Person:
name = "张三" # 共有类属性
__age = 18 # 私有类属性
p = Person()
print(p.name) # 通过实例对象访问共有属性
print(Person.name) # 通过类对象访问共有属性
"""
输出结果:
张三
张三
"""
プライベートクラス属性は、それ以外の場合は、例外を報告し、クラス外部からアクセスすることができません。
インスタンスプロパティ
- またはself.xxx .XXX定義されたプロパティによってオブジェクトのインスタンスは、クラスのインスタンス属性です。
- オブジェクトのプロパティの現在のインスタンスの各インスタンスは、すべてのインスタンスオブジェクトのインスタンス属性を持つようにしたい場合は、インスタンスの属性__init __初期化プロセスを定義し、唯一の存在です。
次のようにコードで示される属性の例は、定義されています。
class Person:
def __init__(self):
self.name = "张三" # 定义实例属性
p = Person()
print(p.name)
若しくは
class Person:
pass
p = Person()
p.name = "张三" # 定义实例属性
print(p.name)
クラスオブジェクトのクラス属性の値を変更することによって、
たぶん、私たちはクラスインスタンスオブジェクトを介してプロパティの値を変更すると思うよ、それはこれです:
class Person:
sex = "男"
def __init__(self):
self.sex = "女"
p = Person()
print(p.sex)
print(Person.sex)
"""
输出结果:
女
男
"""
あなたは、おそらくだと思います:
class Person:
sex = "男"
p = Person()
p.sex = "女"
print(p.sex)
print(Person.sex)
"""
输出结果:
女
男
"""
基本的に、彼らは同じであり、かつ、class属性の値を変更するだけで、オブジェクトの現在のインスタンスで同じ名前のインスタンス属性を持つとクラス属性を追加し、一例として、オブジェクトインスタンスの属性を名前の属性を参照するための場合はシールドを強制されますされませんプロパティのインスタンスを削除しない限り、クラスの外では、その参照にインスタンスプロパティを属性。
唯一のクラスオブジェクトは、クラスでプロパティの値を変更することができます
class Person:
sex = "男"
Person.sex = "女"
print(Person.sex)
"""
输出结果:
女
"""
クラスメソッド
メソッドは、クラスのオブジェクトを有する一般コースの最初のパラメータ(AS CLSクラスメソッド、最初のパラメータはクラスオブジェクトでなければならないクラスのメソッドのためのプロセスの種類、識別するためのデコレータ@classmethodが必要であり、他の名前を使用することができますその最初の引数として変数、ほとんどの人は、最初の引数の名前として「CLS」に使用されている、それは、)「CLS A」を使用するのが最善であるインスタンスオブジェクトとクラスオブジェクトを通してアクセスすることが可能。
class People(object):
country = 'china'
#类方法,用classmethod来进行修饰
@classmethod
def getCountry(cls):
return cls.country
p = People()
print(p.getCountry()) #可以用过实例对象引用
print(People.getCountry()) #可以通过类对象引用
"""
输出结果:
china
china
"""
クラスメソッドは、クラスのプロパティを変更することができる役割があります:
class People(object):
country = 'china'
#类方法,用classmethod来进行修饰
@classmethod
def getCountry(cls):
return cls.country
@classmethod
def setCountry(cls,country):
cls.country = country
p = People()
print(p.getCountry()) #可以用过实例对象引用
print(People.getCountry()) #可以通过类对象引用
p.setCountry('English')
print(p.getCountry())
print(People.getCountry())
"""
输出结果:
china
china
English
English
"""
staticメソッド
パラメータが渡されないと関連するインスタンス属性の方法は、それが静的メソッドとして定義することができ、@staticmethodを変更することによって変更することが必要な場合、静的メソッドは、マルチ定義されたパラメータを必要としません。
class People(object):
country = 'china'
@staticmethod
def getCountry():
return People.country
print (People.getCountry())
概要
クラス及びインスタンスメソッドと見ることができる静的メソッドの定義から、最初のパラメータは、それがCLSのプロパティおよびオブジェクトクラスのメソッドによって参照されなければならないクラス・オブジェクト・クラスメソッドCLSである方法の第1例パラメータは、インスタンス属性(これは、特定の分析が必要)があるかもしれない、クラスの属性とすることができる自己参照することにより、その後、オブジェクト自身のインスタンスが、同じ名前のクラスおよびインスタンスのプロパティの存在下で、より高いインスタンスが優先属性。追加の静的メソッド定義されたパラメータ、静的メソッドの参照特性は、それがクラスオブジェクトによって参照されてはなりません。