Vấn đề về hướng đối tượng trong Python
Thực sự thì em cảm thấy quá bế tắc với vấn đề này nên e mới đặt câu hỏi.E không thể hiểu đc cách hoạt động của def tong class
-Class là gì?? Tại sao phải dùng Class ???
-init là gì ?? nó có phải là khai báo biến để dùng chung cho mọi def khác không??
-init tự động chạy khi khai báo đối tượng??
-sefl có thể giải thích như nào cho dễ hiểu nhất??
-Tại sao trong class lại phải có nhiều def??chứa cái khác được không ??
Các Bác có thể lấy ví dụ thực tế trong cs để giải thích giúp em về vấn đề này giúp em.Em tìm nhiều tài liệu nói về class nhưng vẫn k hiểu.
Cảm ơn các bác !!!
Bạn phải hiểu lập trình hướng đối tượng là gì trước rồi mới quan tâm đến init, def, self.
Còn nếu bạn đã biết về OOP nhưng gặp khó khăn về cú pháp của Python thì:
def
là từ khóa khai báo hàm hay methodself
cũng giống nhưthis
trong C++ hay Java__init__
là phương thức khởi tạo đối tượng.cảm ơn bác.những khái niệm đó em đều biết hết bác ạ.nhưng thực sự thì em không thể hiểu đc cách nó làm việc
bác có thể lấy giúp em 1 vd thực tế để em thông não không.bí bách khó chịu quá.
Mình ví dụ đơn giản class python cho bạn dễ hiểu:
Output:
Ở trên là 1 ví dụ cơ bản của 1 class trong python:
Ở trên là khai báo class Daynhauhoc kế thừa từ class object
Hàm _init_ là hàm constructor mặc định của class. khi new 1 object của class thì sẽ tự động nhảy vào thực hiện hàm này.
Từ khóa def để định nghĩa 1 hàm trong python, không như trong C# hoặc Java con trỏ this tự thêm vào function trong class, hàm trong class của python phải có tham số self.
Khi gọi hàm thì có thể truyền vào self hoặc không cần., 2 cách gọi hàm theo bên dưới là như nhau.
Hi vọng giúp bạn hiểu hơn về class trong python. Có gì thắc mắc mình sẽ trả lời thêm cho bạn
Đọc câu hỏi của bạn thì có vẻ như bạn không hiểu gì về lập trình hướng đối tượng (OOP).
Bạn nên tìm hiểu về OOP trước.
Có lẽ.mình chỉ nghĩ đơn giản HĐT là tạo ra đối tượng(thực thể ) để giải quyết vấn đề.Không biết có đúng k nữa
Bạn nên hiểu hướng đối tượng trước có rất nhiều tài liệu trên mạng. Lúc đầu mình cũng rất mơ hồ. Bạn đang đi theo hướng đúng đó. Bạn nên tìm hiểu ứng dụng của nó để có thể dễ hiểu hơn. Nếu không bạn đọc mà cũng không thể hiểu nó dùng để làm gì thì rất khó nhớ
Tóm lươt như thế này
HĐT có những thuộc tính sau
ví dụ
có class(thực thể) như sau
class concoho{
ten as tring
mau as string
method can(){
print('ten tao là : ’ & ten & ‘ai lai gan tao can’)
}
}
cái này chỉ là tóm lượt đơn giản cho bạn dễ hiểu
nếu muốn chi tiết phải đọc kỹ hơn rồi thực hành nhiều
có gì sai mấy bạn chém nhẹ tay!
Cho mình hỏi chút, Tham số “Day nhau hoc” truyền vào object Demo. Tham số này sau đó sẽ truyền trực tiếp vào hàm init với đối số name (def init(self,name)). Vậy tham số này chỉ có thể truyền vào hàm init (Nó chỉ làm việc với hàm này) thôi đúng ko bạn. Nếu ko có hàm init. Thì phải khai báo dạng: demo=Daynhauhoc()?
Bạn không cần viết hàm init nhưng khi bạn khởi tạo 1 object thì nó tuỳ thuộc vào tham số khởi tạo để gọi hàm init. Lúc đó bắt buộc bạn phải implement hàm init tương ứng, nếu không run sẽ báo lỗi
Ví dụ:
demo = Daynhauhoc() thì gọi hàm init() =>defualt có sẵn nên không có thì không báo lỗi
demo = Daynhauhoc(1_tham_so) thì gọi hàm init(1_tham_so) => nếu không có nó sẽ báo lỗi.
Thank bạn, mình đã hiểu đc chút ít. Mình hiểu đơn giản tham số truyền vào class khi tạo một object mới thì nó chỉ dành cho hàm init . Ngoài khởi tạo biến ra thì trong hàm init này có thể có các chức năng khác không bạn. Và biến này là biến dùng trong class đung ko ah (biến cục bộ trong phạm vi class)
Cái tên init để chỉ mục đích của nó là làm tất cả công việc để khởi tạo object cho đúng, kiểm soát lỗi trước khi sử dụng nên nó ko còn chức năng nào khác