01/10/2018, 10:19

Hỏi về tham số __str__ và __eq__

Mọi người cho mình hỏi hai tham số streq 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ì

17XGOD viết 12:27 ngày 01/10/2018

def là definition dùng để khai báo 1 hàm, __str____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

Conan Nhoc viết 12:32 ngày 01/10/2018

ý 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

HK boy viết 12:21 ngày 01/10/2018

Đây là 1 module về vector

Cái này là class

hai tham số str và eq có tác dụng gì

ý mình là 2 cái tham số đó có tác dụng gì á

Chết không chứ lị, lại thêm 1 người nữa coi def là hàm và xâu bên cạnh def là tham số Học hành thế đấy
[spoiler]Về học lại cơ bản Python đi trước khi mình đến chỗ bạn và cho bạn một trận [/spoiler]
streqHÀM bạn nhé.

streq 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

Trong trường hợp này thì 2 hàm streq đều là public vì có __ ở trước và sau tên hàm.

Khoa NTA viết 12:21 ngày 01/10/2018

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)

Bài liên quan
0