Trong Python câu lệnh import được sử dụng cho mô-đun, không lớp học ... như vậy để nhập khẩu một lớp học mà bạn cần một cái gì đó giống như
from mymodule import MyClass
Thêm vào điểm của câu hỏi của bạn là câu trả lời là có. Trong các lớp Python chỉ là các đối tượng thường xuyên và một phương thức lớp chỉ là một hàm được lưu trữ trong một thuộc tính đối tượng.
Thuộc tính của đối tượng trong Python hơn nữa là động (bạn có thể thêm thuộc tính đối tượng mới khi chạy) và thực tế này, kết hợp với trước đó có nghĩa là bạn có thể thêm phương thức mới vào lớp khi chạy.
class MyClass:
def __init__(self, x):
self.x = x
...
obj = MyClass(42)
def new_method(self):
print "x attribute is", self.x
MyClass.new_method = new_method
obj.new_method()
Cách này có thể hoạt động? Khi bạn gõ
obj.new_method()
Python sẽ làm như sau:
nhìn cho new_method
bên trong đối tượng obj
.
Không tìm thấy nó như là một thuộc tính thể hiện nó sẽ cố gắng tìm kiếm bên trong đối tượng lớp (có sẵn là obj.__class__
), nơi nó sẽ tìm thấy hàm.
Bây giờ có một chút thủ đoạn gian trá vì Python sẽ nhận thấy rằng những gì nó tìm thấy là một chức năng và do đó sẽ "quấn" nó trong một đóng cửa để tạo ra những gì được gọi là "phương pháp ràng buộc". Điều này là cần thiết bởi vì khi bạn gọi obj.new_method()
bạn muốn gọi MyClass.new_method(obj)
... nói cách khác, ràng buộc hàm là obj
để tạo phương thức được ràng buộc là điều sẽ quan tâm đến việc thêm tham số self
.
Phương pháp ràng buộc này là phương thức được trả về bởi obj.new_method
và sau đó điều này cuối cùng sẽ được gọi là do kết thúc ()
trên dòng mã đó.
Nếu tìm kiếm lớp cũng không thành công thay vì các lớp cha mẹ cũng được tìm theo thứ tự cụ thể để tìm các phương pháp và thuộc tính kế thừa và do đó mọi thứ phức tạp hơn một chút.
Có thể sử dụng: http://stackoverflow.com/questions/962962/python-changing-methods-and-attributes-at-runtime –