ฉันสับสนในสิ่งที่ไม่เปลี่ยนรูปแบบ ฉันรู้ว่าfloat
วัตถุนั้นถือว่าไม่เปลี่ยนรูปพร้อมกับตัวอย่างประเภทนี้จากหนังสือของฉัน:
class RoundFloat(float):
def __new__(cls, val):
return float.__new__(cls, round(val, 2))
สิ่งนี้ถือว่าไม่เปลี่ยนรูปเนื่องจากโครงสร้างคลาส / ลำดับชั้นหรือไม่ความหมายfloat
อยู่ที่ด้านบนสุดของคลาสและเป็นการเรียกเมธอดของตัวเอง คล้ายกับตัวอย่างประเภทนี้ (แม้ว่าหนังสือของฉันบอกว่าdict
ไม่แน่นอน):
class SortedKeyDict(dict):
def __new__(cls, val):
return dict.__new__(cls, val.clear())
ในขณะที่บางสิ่งบางอย่างไม่แน่นอนมีวิธีการภายในชั้นเรียนด้วยตัวอย่างประเภทนี้:
class SortedKeyDict_a(dict):
def example(self):
return self.keys()
และสำหรับสุดท้ายclass(SortedKeyDict_a)
หากฉันผ่านการตั้งค่าประเภทนี้:
d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
โดยไม่ต้องเรียกexample
เมธอดมันจะส่งคืนพจนานุกรม SortedKeyDict
กับ__new__
ธงว่ามันเป็นข้อผิดพลาด ฉันลองส่งจำนวนเต็มไปที่RoundFloat
ชั้นเรียนด้วย__new__
และมันก็ไม่มีข้อผิดพลาด