DAY 4.クラス変数(属性)とインスタンス変数(属性)
- クラス変数:すべてのクラスのインスタンス間は、部屋内のすべてのオブジェクトのコピーを1つだけ保持する、クラス変数を変数を共有することができます
- クラス本体に定義されています
- オブジェクトクラスのすべてのインスタンスがクラス変数にアクセスすることができます
- クラス変数は、クラス、インスタンスオブジェクトによってのみ読み取りアクセスを変更することができます
- 使用すると、
对象名.类变量名 = new value
オブジェクトクラス属性を変更するのではなく、新しいプロパティオブジェクトを追加するために使用されていません
class Demo:
# 类变量
classVar = 0
def __init__(self):
self.instanceVar = 1
if __name__ == '__main__':
demo1 = Demo()
demo2 = Demo()
# 类的所有实例对象都可以访问类变量
print(demo1.classVar) # 0
print(demo2.classVar) # 0
# 由类修改类变量
Demo.classVar = 2
print(demo1.classVar) # 2
print(demo2.classVar) # 2
# 注意,这样不是在修改类变量,而是给实例对象添加了一个属性
demo1.classVar = 2
print(demo1.classVar) # 2
- インスタンス変数:オブジェクトをインスタンス化するとき、各インスタンス変数の間には影響を与えない、独自のインスタンス変数を持っています
- コンストラクタで定義されています
- オブジェクトインスタンスの変更インスタンス変数、クラスのインスタンス変数は、の意味を変更しませんでした
- オブジェクトの各インスタンスは、インスタンス変数を持っています
class Demo:
# 类变量
classVar = 0
def __init__(self):
# 实例变量
self.instanceVar = 1
if __name__ == '__main__':
print(demo1.instanceVar) # 1
print(demo2.instanceVar) # 1
# 各实例对象间的实例变量互相不影响
demo1.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
# 用类修改实例变量没意义
Demo.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
4.1概要
変数(属性) | 定義 | 読みます | 修正 | メモリ |
---|---|---|---|---|
クラス変数 | クラス本体に定義されています | className.classVar とobjectName.classVar |
className.classVar = new value |
ただ、コピーを保持 |
インスタンス変数 | コンストラクタで定義されています | objectName.instanceVar |
objectName.instanceVar = new value |
オブジェクトの各インスタンスは、互いに独立してオブジェクト間、保持しています |
**注:**使用すると、
objectName.classVar = new value
新しいプロパティを追加する場合があり
参考記事: