定义实例属性的方法
- 实例绑定实例属性
- 通过self变量对属性进行绑定
定义类属性的方法
在类中直接定义类属性
属性同名时候的优先级
实例属性的访问优先大于类属性
知识点总结
在Python中,实例属性(Instance Attributes)和类属性(Class Attributes)是两种不同类型的属性,它们分别属于类的实例和类本身。
-
实例属性(Instance Attributes):
- 实例属性是属于类的实例的特定数据,每个实例都可以有不同的实例属性值。
- 实例属性通常在类的
__init__
方法中初始化,也可以在实例创建后随时添加和修改。 - 访问实例属性需要通过实例本身,使用点运算符(
.
)来访问。
例如:
class Person: def __init__(self, name, age): self.name = name # 实例属性 self.age = age # 实例属性 john = Person("John Doe", 30) print(john.name) # 输出: John Doe print(john.age) # 输出: 30
-
类属性(Class Attributes):
- 类属性是属于类本身的属性,它在所有实例之间共享相同的值。
- 类属性通常在类的定义中直接定义在类体中。
- 类属性可以通过类名或实例访问,但通常建议通过类名访问以清晰表达该属性是属于类的。
例如:
class Person: species = "Homo sapiens" # 类属性 def __init__(self, name, age): self.name = name # 实例属性 self.age = age # 实例属性 john = Person("John Doe", 30) print(john.species) # 输出: Homo sapiens print(Person.species) # 输出: Homo sapiens
在这个例子中,
species
是一个类属性,所有属于Person
类的实例共享相同的species
值。
需要注意的是,当实例和类都拥有同名属性时,实例属性会覆盖类属性:
class Person:
species = "Homo sapiens" # 类属性
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age # 实例属性
self.species = "Homo erectus" # 同名实例属性
john = Person("John Doe", 30)
print(john.species) # 输出: Homo erectus
在上面的例子中,john.species
访问的是实例属性,而不是类属性,因此它的值是"Homo erectus"
,而不是"Homo sapiens"
。
总结来说,实例属性属于类的实例,每个实例都有自己的值。类属性属于类本身,所有实例共享相同的值。