Một, cách đơn giản hơn, như các câu trả lời khác đặt nó, là giữ cho thuộc tính của bạn luôn luôn là một thuộc tính lớp. Nếu nó được đặt trên thân lớp và tất cả các quyền truy cập ghi vào thuộc tính đều thông qua tên lớp, không phải là một thể hiện, sẽ hoạt động:
>>> class Object[object]:
... speed = 0
...
>>> a = Object[]
>>> b = Object[]
>>> c = Object[]
>>>
>>> Object.speed = 5
>>> print a.speed
5
>>>
Tuy nhiên, nếu bạn đã từng đặt thuộc tính trong một trường hợp thực hiện theo cách này, trường hợp này sẽ có thuộc tính riêng của nó và nó sẽ không còn thay đổi cùng với phiên bản khác:
>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
Để khắc phục điều đó, để bất cứ khi nào thuộc tính được đặt trong bất kỳ trường hợp nào, bản thân thuộc tính lớp được thay đổi, cách dễ dàng hơn là có đối tượng làm thuộc tính - thay vào đó, Setter đặt thuộc tính lớp: thay vào đó:
class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
Hoạt động nào:
>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
Nếu bạn muốn có thuộc tính độc lập trên các trường hợp, nhưng phương thức "set_all" đặc biệt sẽ đặt thuộc tính trong mọi trường hợp, cách sử dụng mô -đun GC [Trình thu thập rác] trong thư viện tiêu chuẩn, để tìm và lặp qua Tất cả các trường hợp của lớp và đặt các thuộc tính thể hiện của chúng:
import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
Kết quả là:
>>> a =Object[]
>>> b = Object[]
>>> a.speed = 5
>>> b.speed = 10
>>> a.speed, b.speed
[5, 10]
>>> a.set_all_speed[20]
>>> a.speed, b.speed
[20, 20]
Làm thế nào để bạn thay đổi các biến thể hiện trong Python?
Chúng ta có thể sửa đổi giá trị của biến thể hiện và gán một giá trị mới cho nó bằng tham chiếu đối tượng. Lưu ý: Khi bạn thay đổi giá trị của biến thể hiện của một đối tượng, các thay đổi sẽ không được phản ánh trong các đối tượng còn lại vì mọi đối tượng đều duy trì một bản sao riêng của biến thể hiện.
Loại biến nào được chia sẻ bởi tất cả các trường hợp của lớp?
Làm thế nào để bạn thay đổi các biến thể hiện trong Python?
Chúng ta có thể sửa đổi giá trị của biến thể hiện và gán một giá trị mới cho nó bằng tham chiếu đối tượng. Lưu ý: Khi bạn thay đổi giá trị của biến thể hiện của một đối tượng, các thay đổi sẽ không được phản ánh trong các đối tượng còn lại vì mọi đối tượng đều duy trì một bản sao riêng của biến thể hiện.
Loại biến nào được chia sẻ bởi tất cả các trường hợp của lớp?
Một biến tĩnh được chia sẻ bởi tất cả các trường hợp của một lớp. Chỉ có một biến được tạo cho lớp.
3 import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
14. If we try to change a class variable using an object, a new instance [or non-static] variable for that particular object is created and this variable shadows the class variables. Below is a Python program to demonstrate the same.>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
Python3
class
CSStudent:
>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
0>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 ________ 13 & nbsp; & nbsp; & nbsp; & nbsp;____10
>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
5 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
8>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
8class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
1CSStudent:
4>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
3CSStudent:
6>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
5import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
00>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
01>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
03import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
05>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
09>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
11>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
5import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
14import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a =Object[]
>>> b = Object[]
>>> a.speed = 5
>>> b.speed = 10
>>> a.speed, b.speed
[5, 10]
>>> a.set_all_speed[20]
>>> a.speed, b.speed
[20, 20]
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
20import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
05>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
09>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
11>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
5Output:
Initially a.stream = cse b.stream = cse After changing a.stream a.stream = ece b.stream = cse
Chúng ta nên thay đổi các biến lớp chỉ bằng tên lớp. & NBSP;
Python3
class
CSStudent:
>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
0>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 ________ 13 & nbsp; & nbsp; & nbsp; & nbsp;____10
>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
5 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
8>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
7class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
8class Object[object]:
_speed = 0
@property
def speed[self]:
return self.__class__._speed
@speed.setter
def speed[self, value]:
self.__class__._speed = value
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
1CSStudent:
4>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
3CSStudent:
6>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
5import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
00>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
01>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
03import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
05>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
6>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
1>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
09>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
3>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
11>>>
>>> a = Object[]
>>> b = Object[]
>>> a.speed, b.speed
[0, 0]
>>> a.speed = 10
>>> a.speed, b.speed
[10, 10]
5import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
14import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
9>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
00>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
01>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
2 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
03Output:
a.stream = cse Class variable changes to mec Value of variable steam for each object a.stream = mec b.stream = mec
import gc
class Object[object]:
def __init__[self]:
self.speed = 0
def set_all_speed[self, value]:
for instance in [obj for obj in gc.get_referrers[self.__class__]:
if isinstance[obj, self.__class__]]:
instance.speed = value
3 >>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>
05 Nikhil Kumar Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to . See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above