类变量

类变量表示所有的对象所共有的一种数据.换句话说, 所有的对象都可以直接访问到, 并且他们访问到的是同一个变量(肯定是相同的值!)

把变量直接声明在类的内部的变量.

访问类变量直接通过类名.变量名来访问.

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)


上面这种写法, 会导致使用这个类创建的对象的nameage这个两个实例变量的值都会初始化为同样的值, 这其实并不好.

我们想每个变量初始化的值都不一样, 可以在创建的对象的是把具体的值沟通过实参传递过去, 则实参会自动传到__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)


Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""