类变量
类变量表示所有的对象所共有的一种数据.换句话说, 所有的对象都可以直接访问到, 并且他们访问到的是同一个变量(肯定是相同的值!)
把变量直接声明在类的内部的变量.
访问类变量直接通过类名.变量名
来访问.
class Student:
# 直接在类中定义变量,
# 这样的变量就是类变量(类属性, 类似 java 中的静态属性)
country = "china"
print(Student.country)
# 修改类变量的值
Student.country = "usa"
print(Student.country)
当然你也可以在任何的地方通过类名.属性=值
的方式动态给类添加类属性.
class Student:
# 直接在类中定义变量,
# 这样的变量就是类变量(类属性, 类似 java 中的静态属性)
country = "china"
Student.count = 1 # 动态添加类属性
print(Student.count)
但是, 建议在类中直接定义类属性, 只有在需要的时候才使用动态的方式添加类属性.
实例变量
实例变量表示每个对象都自己所独有.
所以, 实例变量与每个具体的对象相关.
添加实例变量:
一般是在一个叫做__init__()
的方法里面来添加. (关于方法下节再细讲, 现在你只需要知道他是一个函数就可以了)
__init__()
, 注意他是左右分别有 2 个_
. 这个方法不需要我们手动去调用, 当你使用类创建对象的时候, 会自动调用这个方法.
这个方法的第 1 个参数永远是创建的那个对象(所有的实例方法都是这样的), 我们可以通过这个参数来向对象中添加属性, 这样的属性就是实例属性.
作为国际惯例, 第 1 个参数的一般都命名为self
, 当然你也可以给他起个别的名字, 但是何必呢!
class Student:
def __init__(self):
self.name = "李四"
self.age = 20
s = Student()
print(s.name)
print(s.age)
上面这种写法, 会导致使用这个类创建的对象的name
和age
这个两个实例变量的值都会初始化为同样的值, 这其实并不好.
我们想每个变量初始化的值都不一样, 可以在创建的对象的是把具体的值沟通过实参传递过去, 则实参会自动传到__init__()
方法的第 2 个开始的参数中.
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
zs = Student("张三", 20)
print(zs.name + " " + str(zs.age))
ls = Student("李四", 30)
print(ls.name + " " + str(ls.age))
你会发现每个对象的值都不一样的!
可以通过对象直接访问类变量
python 允许通过对象直接访问到类变量. (有些语言是不允许的, 比如 c#, JavaScript 就不允许, 但是 java 允许)
class Student:
country = "china"
def __init__(self, name, age):
self.name = name
self.age = age
zs = Student("张三", 20)
print(zs.name + " " + str(zs.age))
ls = Student("李四", 30)
print(ls.name + " " + str(ls.age))
print(zs.country) # 通过对象直接访问类变量
print(ls.country)