2011-10-24 28 views
10

Tôi tương đối mới với python Tôi muốn chạy một khối mã chỉ một lần cho một lớp. Giống như khối tĩnh trong java.Có khối tĩnh trong lớp trong python

cho ví dụ:

class ABC: 
    execute this once for a class. 

Có bất kỳ tùy chọn như vậy có sẵn trong python?

Trong java, chúng tôi viết nó như thế này. Điều này được thực thi chỉ một lần cho một lớp, tại thời điểm lớp được nạp. Không cho mọi đối tượng sáng tạo

public class StaticExample{ 
    static { 
     System.out.println("This is first static block"); 
    } 
} 

Cảm ơn

+1

Bạn không muốn đặt mã của mình vào hàm '__init__'? –

+2

Tôi đoán là không. __init__ được gọi trên mỗi tạo đối tượng. Tôi cần nó để thực hiện nó chỉ một lần. –

+1

@ root45: sẽ được gọi một lần cho mỗi * instance * của lớp. M S đang yêu cầu thứ gì đó được gọi một lần cho mỗi lớp. – Crisfole

Trả lời

9

Để làm điều này chỉ cần đặt mã trực thuộc định nghĩa lớp (song song với các định nghĩa chức năng cho lớp học.

Tất cả mã trực tiếp trong lớp được thực hiện khi tạo kiểu đó trong t không gian tên của lớp học. Ví dụ:

class Test: 
    i = 3 
    y = 3 * i 
    def testF(self): 
     print Test.y 

v = Test() 
v.testF() 
# >> 9 

Chỉ cần điền vào các bit cuối cùng của thông tin cho bạn: chức năng phương pháp của bạn def s cũng đang được thực hiện (giống như họ nhận được "thực hiện" khi bạn định nghĩa một hàm trên namespace toàn cục), nhưng họ không được gọi. Nó chỉ xảy ra là thực hiện một def không có kết quả rõ ràng có thể nhìn thấy.

Hướng đối tượng của Python khá thông minh, nhưng phải mất một chút để có được đầu của bạn xung quanh nó! Giữ nó lên, đó là một ngôn ngữ rất thú vị.

+0

Cảm ơn, Điều này sẽ giúp. –

+0

Vui lòng không truy cập biến tĩnh/biến lớp với tự sử dụng. Ít nhất sử dụng Test.y thay vì – Artur

+0

Huh, không bao giờ nhận thấy rằng tôi đã làm điều đó. Đã sửa. – Crisfole

5
>>> class MyClass(): 
...  print "static block was executed" 
... 
static block was executed 
>>> obj = MyClass() 
>>> 

Xem ở đây để biết thêm thông tin về các biến tĩnh/chức năng bằng Python: Static class variables in Python

+0

Cảm ơn, Điều này sẽ giúp. –

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