在python类中定义的函数,既可以作为类的方法使用,也可以由实例对象调用。函数的参数和变量可以分为类变量和实例变量两种类型,这取决于定义在哪个作用域。下面分别介绍类变量和实例变量的使用方式和注意事项。
一、类变量
类变量即定义在类作用域内,但在函数之外的变量。它的生命周期与类相同,所有该类的实例对象都可以访问类变量并对其进行修改。在类定义时,可以直接在类中声明变量,也可以在函数中声明变量并用cls.
来调用类变量。
1.1 定义类变量
可以直接在类中定义变量作为类变量,如下所示:
class Person:
name = "default"
age = 18
1.2 访问类变量
可以通过类名或实例对象来访问类变量,如下所示:
# 通过类名来访问类变量
print(Person.name) # 输出:default
p1 = Person()
p1.name = "Tom"
# 通过实例对象来访问类变量
print(p1.name) # 输出:Tom
p2 = Person()
# 所有该类实例对象共享同一个类变量
print(p2.name) # 输出:default
1.3 修改类变量
可以通过类名或实例对象来修改类变量,如下所示:
# 通过类名来修改类变量
Person.name = "Jerry"
p1 = Person()
# 修改类变量对所有实例对象都生效
print(p1.name) # 输出:Jerry
p2 = Person()
print(p2.name) # 输出:Jerry
# 通过实例对象来修改类变量
p2.name = "Bob"
print(p1.name) # 输出:Jerry
print(p2.name) # 输出:Bob
二、实例变量
实例变量即定义在函数内部(类方法、实例方法)的变量。它的生命周期与实例对象相同,每个实例对象都有自己的实例变量,并且不能够被其他实例对象访问和修改。
2.1 定义实例变量
实例变量是在类的方法中进行定义,使用 self.
来声明实例变量,例如下面代码所示:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
2.2 访问实例变量
实例变量只能通过实例对象来访问,如下所示:
p1 = Person("Tom", 20)
# 通过实例对象来访问实例变量
print(p1.name, p1.age) # 输出:Tom 20
2.3 修改实例变量
实例变量只能通过实例对象来修改,如下所示:
p2 = Person("Jerry", 18)
print(p2.name, p2.age) # 输出:Jerry 18
p2.age = 30
print(p2.age) # 输出:30
综上所述,类变量和实例变量的使用方式和注意事项如上所述。在编写python程序时,需要根据实际需求选择适合的变量类型,并正确使用变量,避免程序出错。