Biến lớp nhập Python

Bạn cần nhập tên từ một mô-đun, chẳng hạn như from module import name, nhưng module và ________30____ là các biểu thức được tính toán trong thời gian chạy. Nhu cầu này thường phát sinh, chẳng hạn như khi bạn muốn hỗ trợ các plug-in do người dùng viết

Hàm tích hợp

class Handler:
    def handleSomething(self):
        print "spam!"
0 cho phép điều này

def importName(modulename, name):
    """ Import a named object from a module in the context of this function.
    """
    try:
        module = _ _import_ _(modulename, globals(), locals(  ), [name])
    except ImportError:
        return None
    return vars(module)[name]

Hàm của công thức này cho phép bạn thực hiện tương đương với from module import name, trong đó một trong hai hoặc cả hai modulename là các giá trị động (i. e. , biểu thức hoặc biến) thay vì các chuỗi không đổi. Ví dụ: điều này có thể được sử dụng để triển khai cơ chế phần bổ trợ nhằm mở rộng ứng dụng với các mô-đun bên ngoài tuân thủ giao diện chung. Phản ứng bản năng của một số lập trình viên đối với nhiệm vụ này là sử dụng

class Handler:
    def handleSomething(self):
        print "spam!"
7, nhưng bản năng này sẽ là một phản ứng khá tồi tệ. Tuyên bố
class Handler:
    def handleSomething(self):
        print "spam!"
7 là biện pháp cuối cùng, chỉ được sử dụng khi không còn gì khác (về cơ bản là không bao giờ). Thật quá dễ dàng để có những lỗi khủng khiếp và/hoặc điểm yếu bảo mật khi sử dụng
class Handler:
    def handleSomething(self):
        print "spam!"
7. Trong hầu hết các trường hợp, có nhiều cách tốt hơn. Công thức này chỉ ra một cách như vậy cho một vấn đề quan trọng

Ví dụ: giả sử bạn có trong tệp

class Handler:
    def handleSomething(self):
        print "eggs!"
0

class Handler:
    def handleSomething(self):
        print "spam!"

và trong tệp

class Handler:
    def handleSomething(self):
        print "eggs!"
1

class Handler:
    def handleSomething(self):
        print "eggs!"

sau đó, miễn là thư mục

class Handler:
    def handleSomething(self):
        print "eggs!"
2 nằm trên
class Handler:
    def handleSomething(self):
        print "eggs!"
3, và cả thư mục đó và thư mục
class Handler:
    def handleSomething(self):
        print "eggs!"
4 được xác định là các gói bằng cách chứa một tệp có tên
class Handler:
    def handleSomething(self):
        print "eggs!"
5, chúng tôi có thể nhận và gọi cả hai triển khai bằng mã này

for extname in 'spam', 'eggs':
    HandlerClass = importName("MyApp.extensions." + extname, "Handler")
    handler = HandlerClass(  )
    handler.handleSomething(  )

Có thể loại bỏ các ràng buộc về

class Handler:
    def handleSomething(self):
        print "eggs!"
3 và
class Handler:
    def handleSomething(self):
        print "eggs!"
5, đồng thời nhập động từ mọi nơi, với mô-đun tiêu chuẩn
class Handler:
    def handleSomething(self):
        print "eggs!"
8. Tuy nhiên, điều này về cơ bản khó sử dụng hơn chức năng tích hợp sẵn của
class Handler:
    def handleSomething(self):
        print "spam!"
0 và bạn thường có thể sắp xếp mọi thứ để tránh tính tổng quát và khó khăn của
class Handler:
    def handleSomething(self):
        print "eggs!"
8

Mẫu này được sử dụng trong MoinMoin (http. //moin. nguồn. net/) để tải các tiện ích triển khai các biến thể của một giao diện chung, chẳng hạn như “hành động”, “macro” và “trình định dạng”

Các biến về cơ bản là các ký hiệu đại diện cho một giá trị mà chúng ta đang sử dụng trong một chương trình. Lập trình hướng đối tượng cho phép các biến được sử dụng ở cấp độ lớp hoặc cấp độ thể hiện. Mục đích của bài viết này là phân biệt rõ ràng giữa các loại biến được cung cấp bởi mô hình đối tượng của Python và tiếp tục…

Python là một ngôn ngữ lập trình linh hoạt có thể được sử dụng cho nhiều tác vụ. Nó có một cộng đồng lớn các nhà phát triển, có nghĩa là có sẵn nhiều công cụ và thư viện để giúp bạn hoàn thành công việc của mình. Nó có một số lượng lớn các mô-đun mà chúng tôi có thể nhập và sử dụng trong chương trình của mình. Tuy nhiên, đôi khi nhập mô-đun không nhập tất cả các biến, đặc biệt là những biến bắt đầu bằng dấu gạch dưới (_). Trong những trường hợp như vậy, Python __all__ giúp nhập các biến đó

Python __all__ là một biến có thể được đặt trong tệp

# importing the module
from module import get_random_name

# accessting the method from module
person = get_random_name()

# printing
print(person)
0 của gói. Biến __all__ là danh sách các chuỗi xác định các ký hiệu đó được nhập khi chương trình chạy

Trước khi hiểu cách thức hoạt động của biến Python __all__, hãy cho chúng tôi hiểu mô-đun Python là gì và cách chúng tôi có thể nhập nó

 

Mô-đun Python là gì và cách nhập nó?

Mô-đun Python là một tệp chứa các định nghĩa và câu lệnh Python. Một mô-đun có thể định nghĩa các hàm, lớp và biến. Một mô-đun cũng có thể bao gồm mã có thể chạy được. Nhóm mã liên quan vào một mô-đun giúp mã dễ hiểu và dễ sử dụng hơn. Nó cũng làm cho mã được tổ chức hợp lý. Có một số lượng lớn các loại mô-đun khác nhau có sẵn trong Python. Nhưng trong phần này, chúng tôi sẽ tạo mô-đun của riêng mình để hiểu cách thức hoạt động của nó

# Import a library
import random

# Define constants
COLORS = ("red", "blue", "yellow", "green")
NAMES = ("jake", "alam", "DK")

# Define a custom class
class Person:

    #init method
    def __init__(self, color: str, name: str):
        self.color = color
        self.name = name
        
    def __str__(self):
        return f"Name: {self.name},  Fav color is:  {self.color}"
    
    
# Define a custom function
def get_random_name():
    
    # returning random names and colors
    return Person(random.choice(COLORS), random.choice(NAMES))

# Create a random object
random_person = get_random_name()

Như bạn có thể thấy, chương trình Python ở trên đưa ra một tên ngẫu nhiên từ danh sách và sau đó trả về màu sắc yêu thích của người đó một cách ngẫu nhiên

CŨNG ĐỌC. Các toán tử Python được giải thích chi tiết bằng các ví dụ

Bây giờ hãy lưu tệp và đặt cho nó bất kỳ tên nào bạn muốn. Trong trường hợp của tôi, tôi sẽ chỉ định mô-đun. py

Tiếp theo, mở một Python mới khác và nhập mô-đun. py để có quyền truy cập vào các chức năng của nó

Bây giờ, chúng ta có thể nhập tệp/mô-đun bằng nhiều phương pháp khác nhau. Chúng ta có thể sử dụng IMPORT FROM hoặc chỉ từ khóa IMPORT để nhập các chức năng của mô-đun

Quảng cáo

Trước tiên chúng ta hãy nhập phương thức từ mô-đun bằng cách sử dụng từ khóa IMPORT FROM

# importing the module
from module import get_random_name

# accessting the method from module
person = get_random_name()

# printing
print(person)

đầu ra

Biến lớp nhập Python

Như bạn có thể thấy, bằng cách sử dụng từ khóa IMPORT FROM, chúng ta có thể truy cập vào phương thức get_random_name() bên trong mô-đun

Cách nhập thứ hai là nhập mọi thứ bên trong mô-đun. Ví dụ, xem đoạn mã dưới đây

# importing everything
from module import *

# accessting the method from module
person2 = get_random_name()

# printing
print(person2)

đầu ra

Biến lớp nhập Python
Biến lớp nhập Python

Như bạn có thể thấy, chúng tôi có thể nhập mọi thứ từ mô-đun bằng cách sử dụng IMPORT *. Tuy nhiên, ngay cả khi nhập tất cả các phương thức, biến và lớp từ các mô-đun cũng không thể nhập một số biến. Hãy thảo luận chi tiết về chúng

 

Python __all__ để nhập mọi thứ

Như chúng ta đã thảo luận, thậm chí nhập * không thể nhập một số biến. Ví dụ: bây giờ chúng ta hãy thay đổi tên của các biến trong mô-đun của mình và thử nhập lại

# Import a library
import random

# Define constants
__COLORS__ = ("red", "blue", "yellow", "green")
__NAMES__ = ("jake", "alam", "DK")

# Define a custom class
class Person:

    #init method
    def __init__(self, color: str, name: str):
        self.color = color
        self.name = name
        
    def __str__(self):
        return f"Name: {self.name},  Fav color is:  {self.color}"
    
    
# Define a custom function
def get_random_name():
    
    # returning random names and colors
    return Person(random.choice(__COLORS__), random.choice(__NAMES__))

# Create a random object
random_person = get_random_name()

Như bạn có thể thấy, chúng tôi đã thay đổi tên của biến trong mô-đun của mình và bây giờ chúng bắt đầu bằng dấu gạch dưới (_)

Quảng cáo

Bây giờ chúng ta hãy thử nhập lại và truy cập các biến

# importing the module
from module import *

# Create new object using Class using protected constants
person2 = Person(__COLORS__[0], __NAMES__[1])

đầu ra

CŨNG ĐỌC. Cách triển khai Cây tìm kiếm nhị phân trong Python [Ví dụ đơn giản]

Biến lớp nhập Python
Biến lớp nhập Python

Như bạn có thể thấy, chúng tôi gặp lỗi vì IMPORT * không thể nhập các biến được bảo vệ. Vì vậy, để nhập các biến và phương thức như vậy, chúng ta cần sử dụng biến Python __all__

 

Sử dụng Python __all__ để nhập các biến được bảo vệ

Như chúng ta đã thấy ở trên, chúng ta gặp lỗi khi cố gắng truy cập các biến được bảo vệ từ mô-đun. Những gì chúng tôi có thể làm là chúng tôi có thể sử dụng một biến có tên python __all__ bên trong mô-đun của mình và cung cấp danh sách các biến được bảo vệ mà chúng tôi muốn truy cập bằng IMPORT *. Ví dụ: thêm dòng mã sau vào bên trong mô-đun của bạn

__all__ = ['__COLORS__', '__NAMES__', 'Person', 'random_person', 'random']

Dòng này sẽ cho python biết rằng khi mô-đun được nhập, hãy nhập cả các biến đã cho. Hãy để chúng tôi chạy lại đoạn mã trên

# importing the module
from module import *

# Create new object using Class using protected constants
person2 = Person(__COLORS__[0], __NAMES__[1])

# printing
print(person2)

đầu ra

Quảng cáo

Biến lớp nhập Python
Biến lớp nhập Python

Như bạn có thể thấy, lần này chúng tôi không gặp bất kỳ lỗi nào vì chúng tôi đã chỉ định các biến được bảo vệ bên trong biến Python __all__

 

Tóm lược

Python __all__  là danh sách các đối tượng công khai của mô-đun đó, được diễn giải bằng cách nhập *. Nó ghi đè mặc định ẩn mọi thứ bắt đầu bằng dấu gạch dưới. Khi chúng tôi đang nhập một mô-đun, các biến và phương thức được bảo vệ (bắt đầu bằng dấu gạch dưới) không được nhập. Vì vậy, để nhập các biến được bảo vệ, chúng ta cần tạo một danh sách Python __all__ chứa các biến đó. Và bất cứ thứ gì bên trong con trăn __all__ sẽ được nhập vào,

CŨNG ĐỌC. In biến trong python bằng 4 phương pháp khác nhau

Trong bài viết ngắn này, chúng ta đã thảo luận về cách sử dụng phương thức __all__ của Python để nhập các biến được bảo vệ bằng nhiều ví dụ khác nhau

Bạn có thể nhập một lớp trong python không?

Python cung cấp cho chúng ta nhiều cách khác nhau để chúng ta có thể nhập các lớp và hàm bằng cách sử dụng câu lệnh nhập .

__ Nhập__ trong python là gì?

Người ta có thể sử dụng hàm __import__() có sẵn của Python. Việc nhập các mô-đun trong thời gian chạy cũng giúp . cú pháp. __import__(tên, toàn cầu, địa phương, danh sách từ, cấp độ) Tham số. Tên. Tên của mô-đun được nhập.