อ็อบเจ็กต์คลาสสนับสนุนการดำเนินการสองชนิด: การอ้างอิงแอ็ตทริบิวต์และการสร้างอินสแตนซ์
การอ้างอิงแอททริบิวใช้ไวยากรณ์มาตรฐานที่ใช้สำหรับการอ้างอิงแอททริบิวทั้งหมดใน Python: obj.name ชื่อแอตทริบิวต์ที่ถูกต้องคือชื่อทั้งหมดที่อยู่ในเนมสเปซของคลาสเมื่อสร้างคลาสอ็อบเจ็กต์ ดังนั้นถ้านิยามคลาสดูเหมือนว่านี้:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
จากนั้นMyClass.i
และMyClass.f
เป็นการอ้างอิงแอตทริบิวต์ที่ถูกต้องส่งคืนจำนวนเต็มและฟังก์ชันวัตถุตามลำดับ สามารถกำหนดแอตทริบิวต์คลาสได้ดังนั้นคุณสามารถเปลี่ยนค่าของการMyClass.i
กำหนดได้ __doc__
ยังเป็นแอตทริบิวต์ที่ถูกต้องส่งคืน docstring ที่เป็นของคลาส: "คลาสตัวอย่างง่าย ๆ "
คลาส instantiationใช้สัญกรณ์ฟังก์ชั่น แค่แกล้งทำเป็นว่าคลาสวัตถุเป็นฟังก์ชันแบบไม่มีพารามิเตอร์ที่ส่งคืนอินสแตนซ์ใหม่ของคลาส ตัวอย่างเช่น:
x = MyClass()
การดำเนินการสร้างอินสแตนซ์ (“ เรียก” วัตถุคลาส) สร้างวัตถุว่าง คลาสจำนวนมากต้องการสร้างวัตถุที่มีอินสแตนซ์ที่กำหนดให้เป็นสถานะเริ่มต้นที่เฉพาะเจาะจง ดังนั้นคลาสอาจกำหนดวิธีพิเศษที่ชื่อ__init__()
เช่นนี้
def __init__(self):
self.data = []
เมื่อคลาสกำหนด__init__()
เมธอดการสร้างคลาสอินสแตนซ์จะเรียกใช้__init__()
อินสแตนซ์คลาสที่สร้างขึ้นใหม่โดยอัตโนมัติ ดังนั้นในตัวอย่างนี้สามารถรับอินสแตนซ์ใหม่ได้โดย:
x = MyClass()
แน่นอน__init__()
วิธีการอาจมีข้อโต้แย้งเพื่อความยืดหยุ่นมากขึ้น ในกรณีที่มีปากเสียงมอบให้กับผู้ประกอบการระดับ instantiation __init__()
จะถูกส่งผ่านไปยัง ตัวอย่างเช่น,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
นำมาจากเอกสารอย่างเป็นทางการซึ่งช่วยฉันได้มากที่สุดในที่สุด
นี่คือตัวอย่างของฉัน
class Bill():
def __init__(self,apples,figs,dates):
self.apples = apples
self.figs = figs
self.dates = dates
self.bill = apples + figs + dates
print ("Buy",self.apples,"apples", self.figs,"figs
and",self.dates,"dates.
Total fruitty bill is",self.bill," pieces of fruit :)")
เมื่อคุณสร้างอินสแตนซ์ของคลาสบิล:
purchase = Bill(5,6,7)
คุณได้รับ:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
นอกแต่ในชั้นเรียน มันเหมือนกับจาวาที่มันเหมือนกันหรือมันจะกลายเป็นเหมือนตัวแปรแบบสแตติกซึ่งเริ่มต้นเพียงครั้งเดียวเท่านั้น?