Hàm __init__ và self trong python dùng để làm gì?

cho e hỏi là hàm init trong python là để làm j ạ??
tiện hỏi luôn là tại sao các hàm trong class cứ phải có self là sao ạ :confused:
ví dụ đoạn này ạ:
class MyStuff(object):

def __init__(self):
    self.tangerine = "And now a thousand years between"

def apple(self):
    print "I AM CLASSY APPLES!"

e cảm ơn.

4 Likes

__init__ là hàm dựng hay constructor của một class. Khi một thực thể (instance) của một class được tạo ra thì hàm này sẽ được thực thi đầu tiên và một cách tự động

self giống như this trong các ngôn ngữ hướng đối tượng khác. Đối với các ngôn ngữ khác thì mình không cần phải truyền this hoặc self vào. Nhưng Python yêu cầu phải như thế.

self trong Python không nhất thiết phải là self mà có thể là dat hoặc dnh cũng được. Nhưng người ta sử dụng self để thể hiện đây là thực thể của object. Trong tiếng Anh self có thể hiểu là bản thân nó. Điều này giúp việc đọc code dễ hơn.

18 Likes

e hiểu rồi, cảm ơn a @ltd :))

1 Like

Em biết cách accept câu trả lời của anh là câu trả lời em chấp nhận không? Bấm vào nút trên post của anh nhé.

2 Likes

cũng đang học class này , thấy hơn khó , chưa hiểu vẫn đề lắm

Khi một object được tạo ra (instantiate) thì đúng hơn, còn class được tạo ra khi code chạy qua đoạn định nghĩa class rồi :smile:

2 Likes

Updated with thanks :heart_eyes:

2 Likes
class Mystuff(object):
	def __init__(self):
		self.tangerine = "And now a thousand years between"
		print self.tangerine

	def apple(self):
		print "I AM CLASSY APPLES!"

Em dang tu hoc python theo Learn Python the Hard way toi ex40 gap kho khan nho anh chi giup do:

  • object o treen la bao gom hai def init va def apple phai khong ?
  • tangerine = “And now a thousand years between” co phai la bien co noi dung trong “And now a thousand years between”
  • khi chay thu class nay thi e chi in duoc ket qua la “And now a thousand years between” ma khong in ra duoc “I AM CLASSY APPLES!”
    -“init là hàm dựng hay constructor của một class. Khi một thực thể (instance) của một class được tạo ra thì hàm này sẽ được thực thi đầu tiên và một cách tự động” theo tra loi cua a Dat nhung e van khong hieu lam. Thuc the o day la gi?
  • seft la de truyen cai tangerine = “And now a thousand years between” vo cai init

thực thể cũng là object thôi, nhưng cụ thể hơn. Bạn có thể gọi nó là object cũng được cho dễ hiểu =)))
bạn ghi rõ đoạn code được không. function apple có nằm trong class hay không?
tangerine thì không liên quan gì đến apple hết. Câu lệnh gọi hàm tangerine mà không đả động gì đến apple thì sao in ra được i am classy apples??? Mấy cái này cơ bản quá luôn. Nói chung tổng kết lại bạn học lại cơ bản cho kỹ.

class VietHoa(object):
    #def __init__(self):
    #    self.s=""
    def getString(self):
        self.s=input('Nhập: ')
    def printString(self):
        print(self.s.upper())
str=VietHoa()
str.getString()
str.printString()

Mọi người cho hỏi, đoạn mã trên nếu không dùng __init__ hay có dùng thì code vẫn chạy bình thường. Vậy tại sao phải dùng __init__, mình không hiểu chỗ này ?
Cảm ơn.
Ps, Sao muốn gõ __init__ liền nhau mà không được?

Trong Python, những có một số method được Class định nghĩa sẵn, chúng bắt đầu và kết thúc bằng __.
Khi bạn khởi tạo một đối tượng

object = some_class()

thì mặc định một số phương thức sẽ được gọi ngay lập tức và __init__ là một trong số những phương thức đó. Tuy nhiên, những phương thức này chỉ được class chỉ khởi tạo cho bạn về hình thức, còn nội dung thì bạn phải tự gắn vào cho nó. Dĩ nhiên việc gắn vào hay không là tuỳ ở bạn.
Những phương thức như vậy được quy ước làm một số công việc cụ thể. Bạn có thể không theo quy ước đó, nhưng đây là điều không nên làm :smiley:.
Những phương thức ở trên thì người ta hay có tên gọi cho nó là special methods hoặc magic methods, hoặc đôi khi là dunder methods (Double Underscores).

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?