欢迎访问宙启技术站
智能推送

Python中类属性和实例属性的访问方式和规则

发布时间:2023-12-27 14:51:40

在Python中,类属性是属于类的,而实例属性是属于实例的。类属性可以被所有实例共享,而实例属性是每个实例独有的。

类属性的访问方式可以有两种:

1. 使用类名直接访问,例如:Class_name.attribute_name

2. 使用实例对象访问,例如:instance_name.attribute_name

实例属性的访问方式也可以有两种:

1. 使用实例对象直接访问,例如:instance_name.attribute_name

2. 使用self关键字访问,例如:self.attribute_name

下面来看一些实例来更好地理解类属性和实例属性的访问规则和使用方法。

class Person:
    species = "Homo sapiens"  # 类属性

    def __init__(self, name, age):  # 实例属性
        self.name = name
        self.age = age

    def greeting(self):  # 实例方法
        print(f"Hello, my name is {self.name}. I am {self.age} years old.")

# 使用类属性,通过类名直接访问
print(Person.species)  # 输出:Homo sapiens

# 创建实例
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)

# 使用实例属性,通过实例对象访问
print(person1.name)  # 输出:Alice
print(person2.age)  # 输出:30

# 使用实例属性,通过self关键字访问
person1.greeting()  # 输出:Hello, my name is Alice. I am 25 years old.
person2.greeting()  # 输出:Hello, my name is Bob. I am 30 years old.

# 修改类属性
Person.species = "Homo neanderthalensis"

# 类属性被共享,所有实例的类属性都发生了变化
print(Person.species)  # 输出:Homo neanderthalensis
print(person1.species)  # 输出:Homo neanderthalensis
print(person2.species)  # 输出:Homo neanderthalensis

# 修改实例属性只对该实例对象生效
person1.name = "Alice Smith"
person2.age = 31

# 实例属性被修改,其他实例的属性不受影响
print(person1.name)  # 输出:Alice Smith
print(person2.age)  # 输出:31

在上面的例子中,speciesPerson类的一个类属性,它可以通过类名直接访问,也可以通过实例对象访问。而在__init__方法中定义的nameage是实例属性,它们只能通过实例对象访问,且每个实例对象拥有独立的值。greeting方法是一个实例方法,它可以通过实例对象调用,在方法内部可以使用self关键字来访问实例属性。