Code trong khai báo class nghĩa là thế nào?


cho t hỏi 1 chút, trong C# hay Java, C++ ta luôn có 1 hàm Main, quyết định những gì sẽ chạy, nhưng trong Python viết gì nó sẽ chạy hết phải ko ạ?
ở đây mình tạo 1 class Dictype, mặc dù ko có khai báo đối tượng kiểu Dictype nhưng code bên trong vẫn chạy?

Không !
Nó sẽ chạy cái file được gọi.
Nếu trong file được gọi có hàm main thì nó sẽ chạy hàm main.

3 Likes

không, vì nếu không gọi nó thì nó đâu có chạy

Không được vì linker sẽ đòi entry point :smiley:

3 Likes

Nó sẽ chạy hàm main. Còn hàm main mới gọi những hàm khác.

3 Likes

vậy trong file có hàm main() thì logic chạy code lại giống C++ hoặc C# phải ko ạ?

Lộn, ý mình là nó vẫn đọc mấy hàm khác ngoài main() ra :sweat_smile:. Công nhận mọi người vào rep nhanh vl :joy:

Có khác một chút, trong C# thì bạn khái báo hàm trước rồi gọi sau hay ngược lại đều được. C và C++ không có cái này.

“ưng khái báo” là sao á?
mà ở C++ hay C# THÌ khai báo hàm ngoài lớp hoặc trong lớp , mình nghĩ: nếu hàm trong lớp thì nó gọi là phương thức, còn hàm ngoài lớp thì dùng (), là gọi được nó rồi, lúc đó mới chạy, còn cái ảnh vừa t gửi, thậm chí còn không khởi tạo đối tượng bằng toán tử " new" mà nó cũng chạy?

Không giống.
C#, C++ đều chạy từ hàm main.

Còn trong python nó vẫn chạy từ trên xuống. Những hàm được khai báo (dùng def) thì sẽ chạy nếu được gọi. Hàm main sẽ mặc định được gọi nếu nó tồn tại.

2 Likes

Cái này tùy thuộc C++ hay C#.
C++ có thể khai báo function ngoài lớp. C# bắt buộc phải khai báo trong lớp.

Function thì không thuộc đối tượng và gọi trực tiếp được (thường khi khai báo sẽ đi kèm từ khóa static).
Method thuộc đối tượng và sẽ phải dùng new để khởi tạo đối tượng trước khi sử dụng.

2 Likes

Trong khai báo class của Python vẫn viết code được bình thường :smiley: và nó sẽ chạy khi đối tượng class (của lớp type :smiley: ) được khởi tạo.

3 Likes

mình có đọc thì mọi thứ trong Python là đối tượng, hàm Type() như mình gọi trong ảnh, nhẽ ra nó phải là hàm static, và để gọi nó thì lấy tên lớp chứa nó và thêm dấu . để gọi nó chứ Bạn?

class A:
    x=5
    print(x)

output: 5

đoạn code này mình in ra 5, mà chẳng cần class của lớp gì theo bạn nói, được khởi tạo .


"đối tượng class ( của lớp type :smiley:) ĐƯỢC khởi tạo ", bạn vừa mới nói bên trên xong.

Oops, type là built-in class (đúng hơn là metaclass)

Mà viết vậy là bạn đã tạo ra đối tượng rồi, đối tượng class :smiley:

3 Likes

type trong tiếng Anh nghĩa là kiểu, hàm type() dùng để xác định một kiểu dữ liệu của một biến, mình ko biết ý bạn là gì nhưng mong Bạn đã giúp đỡ thì giúp đỡ chi tiết, chứ viết lủng củng mình chẳng hiểu gì.

class A cũng là 1 object của type class
nên khi tạo class thì cái static của class dc tạo
ở đây x với print(x) là static nên dc gọi khi khai báo class :frowning:
mình nghĩ vậy á, không biết đúng ko, hóng cao nhân

1 Like

Python hơi khác với các ngôn ngữ khác. Tất cả lời gọi hàm. Nằm bên trong class đều sẽ được gọi tại thời điểm khai báo thay vì khi new 1 object thì mớinchayj như ở các nnlt khác. Hiểu đơn giản class trong python cũng là 1 object. Khi bạn khai báo class thực chất bạn đang tạo 1 object và gán các thuộc tính cho object đó luôn

2 Likes

cách hiểu của mình là do print x ở trong lớp A, hàm print không thuộc về lớp vì vậy nó luôn chạy mặc kệ lớp A nó có được khởi tạo hay không.

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