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()
Bài liên quan
Ý bạn là gi?..
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é
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ừ classEngine
ở 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ạoVí dụ sau đoạn code trên là đoạn này:
Nhưng nếu không có dòng
self.scene_map = scene_map
thì bạn không thể truy cậpscene_map
như vậy nữa vì biếnscene_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ônEngine
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 đó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á
Đú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ự.
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