1. 类属性和实例属性的概念
在Python中,类属性和实例属性都是用来描述一个类的特征或者状态的变量,但它们之间有一定的区别。类属性是相对于类而言的,一旦定义便可以直接使用,它是所有该类对象共享的,而实例属性则是相对于对象而言的,每个对象都有自己的实例属性。举个栗子,当我们用Python定义一个人类时,人类的共同属性可以定义为类属性,例如人类都有两只眼睛、一张嘴巴,而个人的姓名、年龄、身高等属性则可以定义为实例属性,因为这些属性是人类类的每一个对象所拥有的。
class Human:
# 类属性
eyes = 2
mouth = 1
# 实例属性
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def say_hello(self):
print(f"Hello, I am {self.name}")
2. 访问类属性和实例属性
2.1. 访问类属性
类属性是属于类的,因此可以通过类名直接访问。
class Human:
# 类属性
eyes = 2
print(Human.eyes) # 2
2.2. 访问实例属性
实例属性是属于类的每个实例的,因此需要先创建一个实例对象,然后通过该实例对象访问其属性。
class Human:
# 实例属性
def __init__(self, name, age):
self.name = name
self.age = age
h = Human('Tom', 25)
print(h.name) # Tom
3. 修改类属性和实例属性
3.1. 修改类属性
对于类属性的修改,只需要直接使用类名来进行修改即可。
class Human:
# 类属性
eyes = 2
Human.eyes = 3
print(Human.eyes) # 3
3.2. 修改实例属性
对于实例属性的修改,需要先创建实例对象,然后通过该实例对象来进行修改。
class Human:
# 实例属性
def __init__(self, name, age):
self.name = name
self.age = age
h = Human('Tom', 25)
h.age = 30
print(h.age) # 30
4. 实例属性和类属性的优先级
当实例属性和类属性同名时,实例属性优先级高于类属性。
class Human:
# 类属性
eyes = 2
# 实例属性
def __init__(self, name, age, eyes):
self.name = name
self.age = age
self.eyes = eyes
h = Human('Tom', 25, 3)
print(h.eyes) # 3
5. 总结
本文介绍了Python中的类属性和实例属性,类属性和实例属性都是用来描述一个类的特征或者状态的变量。类属性是相对于类而言的,一旦定义便可以直接使用,而实例属性则是相对于对象而言的,每个对象都有自己的实例属性。对于访问和修改属性,类属性可以直接使用类名来访问和修改,而实例属性需要先创建实例对象然后通过该实例对象访问和修改。当实例属性和类属性同名时,实例属性优先级高于类属性。