2010-08-17 60 views
12

Vì vậy, tôi đang sử dụng các thành viên lớp tĩnh để tôi có thể chia sẻ dữ liệu giữa các phương thức lớp và các phương thức tĩnh của cùng một lớp (chỉ có 1 instantiation của lớp). Tôi hiểu điều này tốt, nhưng tôi chỉ tự hỏi khi các thành viên tĩnh được khởi tạo? Là nó vào nhập khẩu? Trong lần sử dụng đầu tiên của lớp học? Bởi vì tôi sẽ gọi các thành viên tĩnh của lớp này từ hơn 1 mô-đun (do đó có nhiều hơn 1 câu lệnh nhập). Tất cả các module truy cập vào các phương thức tĩnh có chia sẻ cùng các thành viên dữ liệu tĩnh không? Và nếu khách hàng chính của tôi xóa cá thể của lớp của tôi và sau đó tạo lại nó (mà không chấm dứt hoàn toàn hoặc nhập lại nội dung), các thành viên dữ liệu của tôi có được giữ nguyên không?Các thành viên lớp tĩnh python

Trả lời

13

Chúng sẽ được khởi tạo ở thời gian định nghĩa lớp, sẽ diễn ra vào thời điểm nhập nếu bạn nhập lớp học như một phần của mô-đun. Điều này giả định kiểu định nghĩa thành viên lớp "tĩnh" như sau:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

Lưu ý rằng, đây là thành viên lớp tĩnh, không cần khởi tạo lớp.

Câu lệnh nhập sẽ thực thi nội dung của mô-đun chính xác một lần, bất kể số lần hoặc vị trí được thực thi.

Có, các thành viên tĩnh sẽ được chia sẻ bởi bất kỳ mã nào truy cập chúng.

Vâng, các thành viên tĩnh của một lớp sẽ được duy trì nếu bạn xóa một đối tượng có loại là lớp rằng:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

Vâng tôi nhận ra tôi không cần phải nhanh chóng lớp. Nhưng cá thể lớp cần truy cập vào các thành viên này cũng như các mô-đun khác. Tôi lo ngại rằng tôi đang nhập mô-đun này từ một số mô-đun khác. Điều đó có nghĩa là các thành viên tĩnh được thiết lập lại cho tất cả các mô-đun? Hoặc mỗi mô-đun nhập khẩu nó sẽ có tập hợp các thành viên tĩnh của riêng mình? – Falmarri

+0

Chỉnh sửa của bạn đã trả lời câu hỏi của tôi, cảm ơn =] – Falmarri

Các vấn đề liên quan