python类变量和实例变量
我们知道,无论是在类中定义的属性还是方法,在类的外部,都无法直接调用它们,因此,我们完全可以把类看做是一个独立的作用域(称为类命名空间),则类属性其实就是定义在类命名空间内的变量(类方法其实就是定义的类命名空间中的函数)。
根据定义属性的位置不同,类属性又可细分为类属性(后续用类变量表示)和实例属性(后续用实例变量表示)。
类变量(类属性) (推荐学习:Python视频教程)
类变量指的是定义在类中,但在各个类方法外的变量。类变量的特点是:所有类的实例化对象都可以共享类变量的值,即类变量可以在所有实例化对象中作为公用资源。
注意,类变量推荐直接用类名访问,但也可以使用对象名访问。
例如,下面代码定义了一个 Address 类,并为该类定义了多个类属性:
class Address : detail = '广州' post_code = '510660' def info (self): # 尝试直接访问类变量 #print(detail) # 报错 # 通过类来访问类变量 print(Address.detail) # 输出 广州 print(Address.post_code) # 输出 510660 #创建 2 个类对象 addr1 = Address() addr1.info() addr2 = Address() addr2.info() # 修改Address类的类变量 Address.detail = '佛山' Address.post_code = '460110' addr1.info() addr2.info()
该程序中,第二、三行代码为 Address 定义了两个类变量。当程序中第一次调用 Address 对象的 info() 方法输出两个类变量时,将会输出这两个类变量的初始值。接下来程序通过 Address 类修改了两个类变量的值,因此当程序第二次通过 info() 方法输出两个类变量时,将会输出这两个类变量修改之后的值。
运行上面代码,将会看到如下输出结果:
广州 510660 广州 510660 佛山 460110 佛山 460110
通过输出结果可以看到,addr1 和 addr2 共享类变量,换句话说,改变类变量的值会作用于该类所有的实例化对象。
实例变量指的是定义在类的方法中的属性,它的特点是:只作用于调用方法的对象。
注意,实例变量只能通过对象名访问,无法通过类名直接访问。
Python 允许通过对象访问类变量,但无法通过对象修改类变量的值。因为,通过对象修改类变量的值,不是在给“类变量赋值”,而是定义新的实例变量。
例如如下程序:
class Inventory: # 定义两个类变量 item = '鼠标' quantity = 2000 # 定义实例方法 def change(self, item, quantity): # 下面赋值语句不是对类变量赋值,而是定义新的实例变量 self.item = item self.quantity = quantity # 创建Inventory对象 iv = Inventory() iv.change('显示器', 500) # 访问iv的item和quantity实例变量 print(iv.item) # 显示器 print(iv.quantity) # 500 # 访问Inventory的item和quantity类变量 print(Inventory.item) # 鼠标 print(Inventory.quantity) # 2000
上面程序中,第 8、9 行代码通过实例对 item、quantity 变量赋值,看上去很像是对类变量赋值,但并不是,它们的作用是:重新定义了两个实例变量。
类中,实例变量和类变量可以同名,但是在这种情况下,使用类对象将无法调用类变量,因为它会首选实例变量,因此这也是不推荐“类变量使用对象名调用”的原因。
上面程序在调用 Inventory 对象的 change() 方法之后,访问 Inventory 对象的 item、quantity 变量,由于该对象本身己有这两个实例变量,因此程序将会输出该对象的实例变量的值;接下来程序通过 Inventory 访问它的 item、quantity 两个类变量,此时才是真的访问类变量。
运行上面程序,将看到如下输出结果:
显示器 500 鼠标 2000
Atas ialah kandungan terperinci python类变量和实例变量. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Penggunaan alternatif anotasi parameter python Dalam pengaturcaraan Python, anotasi parameter adalah fungsi yang sangat berguna yang dapat membantu pemaju memahami dan menggunakan fungsi ...

Bermula dengan Python: Lukisan Grafik Hourglass dan Pengesahan Input Artikel ini akan menyelesaikan masalah definisi berubah -ubah yang dihadapi oleh pemula python dalam program lukisan grafik Hourglass. Kod ...

Eksplorasi kod pengesahan retak menggunakan python dalam interaksi rangkaian harian, kod pengesahan adalah mekanisme keselamatan yang sama untuk mengelakkan manipulasi berniat jahat program automatik ...

Bagaimanakah skrip Python jelas output ke kedudukan kursor di lokasi tertentu? Semasa menulis skrip python, adalah perkara biasa untuk membersihkan output sebelumnya ke kedudukan kursor ...

Pilihan Perpustakaan Pembangunan Aplikasi Desktop Python Python Banyak pemaju Python ingin membangunkan aplikasi desktop yang boleh dijalankan pada kedua-dua sistem Windows dan Linux ...

Di Python, bagaimana untuk membuat objek secara dinamik melalui rentetan dan panggil kaedahnya? Ini adalah keperluan pengaturcaraan yang biasa, terutamanya jika perlu dikonfigurasikan atau dijalankan ...
