Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หลีกเลี่ยงข้อมูลคลาสที่แชร์ระหว่างอินสแตนซ์ใน Python


เมื่อเราสร้างอินสแตนซ์ของคลาสใน Python ตัวแปรและฟังก์ชันทั้งหมดจะได้รับการสืบทอดไปยังคลาสที่สร้างอินสแตนซ์ใหม่ แต่อาจมีบางครั้งที่เราไม่ต้องการให้ตัวแปรบางตัวของคลาสพาเรนต์สืบทอดโดยคลาสย่อย ในบทความนี้ เราจะสำรวจสองวิธีในการทำเช่นนั้น

ตัวอย่างตัวอย่าง

ในตัวอย่างด้านล่าง เราแสดงให้เห็นว่าตัวแปรได้รับความร้อนจากคลาสที่กำหนดอย่างไร และมีการใช้ตัวแปรร่วมกันอย่างไรในคลาสที่สร้างอินสแตนซ์ทั้งหมด

class MyClass:
   listA= []

# Instantiate Both the classes
x = MyClass()
y = MyClass()

# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("Instance X: ",x.listA)
print("Instance Y: ",y.listA)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

Instance X: [10, 20, 30, 40]
Instance Y: [10, 20, 30, 40]

ตัวแปรไพรเวทคลาสพร้อม __inti__

เราสามารถใช้เมธอด I need a เพื่อทำให้ตัวแปรภายในคลาสเป็นแบบไพรเวต ตัวแปรเหล่านี้จะไม่ถูกแชร์ในคลาสต่างๆ เมื่อคลาสพาเรนต์ถูกสร้างขึ้น

ตัวอย่าง

class MyClass:
   def __init__(self):
      self.listA = []

# Instantiate Both the classes
x = MyClass()
y = MyClass()

# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("Instance X: ",x.listA)
print("Instance Y: ",y.listA)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

Instance X: [10, 30]
Instance Y: [20, 40]

โดยการประกาศตัวแปรภายนอก

ในแนวทางนี้ เราจะประกาศตัวแปรนอกคลาสอีกครั้ง เมื่อตัวแปรได้รับการเตรียมใช้งานอีกครั้งซึ่งจะไม่ถูกแชร์ในคลาสที่สร้างอินสแตนซ์

ตัวอย่าง

class MyClass:
   listA = []

# Instantiate Both the classes
x = MyClass()
y = MyClass()

x.listA = []
y.listA = []
# Manipulate both the classes
x.listA.append(10)
y.listA.append(20)
x.listA.append(30)
y.listA.append(40)

# Print Results
print("Instance X: ",x.listA)
print("Instance Y: ",y.listA)
Output

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

Instance X: [10, 30]
Instance Y: [20, 40]