30/09/2018, 21:12

Về lệnh self trong code này

Mọi người có thể cho em biết dc không, em đang học LPTHW nhé.

Code:

class Engine(object):

    def __init__(self, scene_map):
        self.scene_map = scene_map

    def play(self):
        current_scene = self.scene_map.opening_scene()
        last_scene = self.scene_map.next_scene('finished')

        while current_scene != last_scene:
            next_scene_name = current_scene.enter()
            current_scene = self.scene_map.next_scene(next_scene_name)

        # be sure to print out the last scene
        current_scene.enter()
Gió viết 23:18 ngày 30/09/2018

Ý bạn là gi?..

Hiệu viết 23:17 ngày 30/09/2018

Có nghĩa là lệnh self.scene_map = scene_map ấy, mình thấy khó hiểu.
P/s: Có thể thay = các trường hợp còn lại nhé

Thành Phạm viết 23:20 ngày 30/09/2018

Dòng này self.scene_map = scene_map nghĩa là tạo ra một biến tên là scene_map của object được tạo từ class Engine ở thời điểm khởi tạo và gán nó bằng biến cũng tên là scene_map được truyền vào tại thời điểm khởi tạo

Ví dụ sau đoạn code trên là đoạn này:

object_duoc_tao_tu_class_engine = Engine('blabla')
print object_duoc_tao_tu_class_engine.scene_map

Output: blabla

Nhưng nếu không có dòng self.scene_map = scene_map thì bạn không thể truy cập scene_map như vậy nữa vì biến scene_map không tồn tại.

Nói hình tượng thì dư lày: cái Engine là cái khuôn làm bánh, Engine('blabla') là 1 cái bánh được tạo ra từ khuôn Engine với gia vị là 'blabla', object_duoc_tao_tu_class_engine là 1 cái bánh, object_duoc_tao_tu_class_engine.scene_map là một thuộc tính (kiểu chiều dài, chiều rộng, có ăn được hay không?) của cái bánh đó, self là chỉ chính cái bánh được tạo từ cái khuôn đó

Trường Giang viết 23:25 ngày 30/09/2018

Dòng này self.scene_map = scene_map nghĩa là tạo ra một biến tên là scene_map của object được tạo từ class Engine ở thời điểm khởi tạo và gán nó bằng biến cũng tên là scene_map được truyền vào tại thời điểm khởi tạo

Vậy nếu là self.map = scene_map, tức là tạo ra biến map của Obj. Obj đó được class Engine khởi tạo. Và ngay lúc map được tạo thì nó gán với scene_map được truyền vào??

Hack não quá

Thành Phạm viết 23:24 ngày 30/09/2018

Đúng roài, có vậy thôi à có thể viết theo kiểu không self như thế này cũng tương tự.

class A:
    pass

a = A() #Khởi tạo
a.map = 'blabla' #Tạo biến (thuộc tính) của object a, và gán bằng 'blabla'

Nó cũng hao hao hàm thôi mà có gì đâu, chỉ khác là nó không dùng thẳng biến truyền vào mà gán vào thuộc tính của object

Bài liên quan
0