Mọi người cho mình hỏi hai tham số str và eq có tác dụng gì vậy . Đây là 1 module về vector mình đang đọc mà ko hiểu 2 cái tham số đó có tác dụng gì
Hỏi về tham số __str__ và __eq__
def là definition dùng để khai báo 1 hàm, __str__ và __eq__ chỉ là tên hàm, nếu bạn có thắc mắc vì sao có __ trước tên thì đó là để khai báo private. Bạn có thể tham khảo thêm ở link này: https://stackoverflow.com/questions/1641219/does-python-have-private-variables-in-classes
ý mình là 2 cái tham số đó có tác dụng gì á. Nếu bỏ nó ra kết quả có thay đổi gì ko.
soucre code : https://storage.googleapis.com/supplemental_media/udacityu/4467878620/vector.py
Trong Python có các phương thức đặc biệt (như cái __init__ đó), và chúng ta có thể ghi đè lên. Thử đoạn code sau coi bạn đoán thử chức năng nó là gì nhé:
>>> class JustTest:
... def __init__(self, val):
... self.__privval = val
... def __str__(self):
... return "JustTest.__privval({})".format(self.__privval)
... def __eq__(self, other_JustTest_instance):
... print "comparing: {} vs {}".format(self, other_JustTest_instance)
... return self.__privval == other_JustTest_instance._JustTest__privval
...
>>> a = JustTest(10)
>>> b = JustTest(20)
>>> print a
JustTest.__privval(10)
>>> print b
JustTest.__privval(20)
>>> a == b
comparing: JustTest.__privval(10) vs JustTest.__privval(20)
False
Thôi để mình nói luôn cho khỏi dài dòng: nó implement str() và toán tử ==.
Khi print instance của class, thay vì <__main__.JustTest instance at 0x0423C5D0> thì nó lại in ra thứ như trong method __str__() kia.
Khi so sánh thì nó in thêm ra dòng comparing... nữa kìa, tức là nó thực thi method __eq__() để chắc chắn hơn, bạn thử xóa dòng cuối trong method __eq__() và thay bằng return False xem, và so sánh 2 instance có giá trị bằng nhau xem.
@masterq1997 cái em gởi là biến nhé, còn này là phương thức 
P/s: phương_thức not in (hàm, tham_số, lệnh)
__str()__ in python as toString() in java
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?