Python面向对象OOP(二)

面向对象中的成员和组合

class Foo:

    # 类变量(静态字段)
    age = 233

    def __init__(self, name):
        # 实例变量
        self.name = name
    
    def func(self):
        pass

# 不同的对象,有不同的存储空间,保存着自己的属性(字段)
obj1 = Foo("Canaan")
obj2 = Foo("Jianjian")
print(obj1.age, obj1.name)  # 静态字段也可以通过对象访问,如果本身没有,就回去类里面找
print(obj2.age, obj2.name)

print(Foo.age)  # 静态字段也可以通过类名去直接访问
Foo.age = 2333  # 静态字段要通过类名去修改
print(Foo.age)  

print(obj1.age, obj1.name)
print(obj2.age, obj2.name)

obj1.age = 123  # 静态字段可以通过对象修改,每个对象之间互不影响,修改之后对类中的类变量也不影响
print(obj1.age, obj1.name)
print(obj2.age, obj2.name)


# 对于实例变量(字段)访问时,只能通过对象访问,即obj.name
# 对于类变量(静态字段),访问时,通过类名去访问,不方便时再使用对象去访问
print(obj1.name)
print(Foo.age)

# 对象对于实例变量(字段)的修改,属性修改互不影响
# 对象对于类变量(静态字段)的修改,对象之间也互不影响,也不影响类中的静态字段,只是相当于在自己的存储空间内封装了一条新的属性
# 以后对于这个字段的使用,每个对象都先访问自己的存储空间,有就用自己的,没有再去用类中的
obj1.age = 123
Foo.age = 2333

使用情况:

如果对象中有一些相同的值,同时修改同时删除,就可以提取为类变量

私有变量和共有变量

原文地址:https://www.cnblogs.com/canaan233/p/13750181.html