Hoàn tất mã IDE

Các IDE như VS Code và PyCharm cung cấp tính năng hoàn thành mã tích hợp cho ngôn ngữ Python.

Thư viện google-ads-python tạo các lớp thông báo protobuf một cách linh động trong thời gian chạy bằng cách sử dụng phương thức getter trên lớp GoogleAdsClient, điều này có thể ngăn chặn các tính năng hoàn thành mã IDE dựa trên việc phân tích tĩnh mã nguồn.

Để cải thiện khả năng tương thích với các công cụ hoàn tất mã dựa trên phân tích tĩnh, bạn có thể:

  1. Sử dụng chú thích loại với phương thức getter động (nên dùng).
  2. Nhập trực tiếp các lớp thông báo protobuf và ứng dụng dịch vụ.

Nhập động bằng gợi ý về loại

Việc sử dụng tính năng nhập động đảm bảo mã của bạn vẫn linh hoạt trong các bản cập nhật thư viện. Việc thêm chú thích kiểu cho phép hoàn thành mã IDE mà không làm mất lợi ích của việc khởi tạo động:

from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.v26.resources.types.campaign import (
    Campaign,
)

client = GoogleAdsClient.load_from_storage()

# Type hints allow the IDE to provide code completion suggestions while
# retaining dynamic class generation.
campaign: Campaign = client.get_type("Campaign")

Nhập trực tiếp

Bạn cũng có thể nhập trực tiếp các lớp thông báo protobuf. Phương pháp này cho phép tính năng hoàn thành mã IDE hoạt động ngay mà không cần sử dụng các phương thức getter:

from google.ads.googleads.v26.resources import Campaign

# The Campaign class is imported directly, enabling the IDE to read the
# class definition and make code completion suggestions.
campaign = Campaign()

Nhược điểm của tính năng nhập trực tiếp

Mặc dù việc nhập trực tiếp các lớp được tạo giúp hoàn thành mã, nhưng cũng có một số đánh đổi:

  1. Khó tìm hơn: Không phải lúc nào cũng rõ ràng mô-đun nào chứa một lớp nhất định, vì vậy, việc tìm đúng đường dẫn nhập có thể gặp khó khăn.
  2. Dễ hỏng khi nâng cấp: Cấu trúc thư mục của các lớp được tạo có thể thay đổi theo phiên bản mới của thư viện ứng dụng. Nếu bạn nhập trực tiếp các lớp, mã của bạn có thể bị hỏng khi bạn nâng cấp, trong khi mã sử dụng phương thức getter không bị ảnh hưởng bởi các loại thay đổi này.
  3. Cần khởi chạy thủ công: Phương thức get_service khởi chạy các dịch vụ có chế độ xác thực, chế độ cài đặt truyền tải và trình chặn gRPC (đính kèm các tiêu đề như login-customer-id và linked-customer-id, xử lý việc ghi nhật ký và gói lỗi trong GoogleAdsException) trước khi trả về các dịch vụ đó. Nếu bạn nhập và tạo thực thể cho các dịch vụ trực tiếp, thì các trình chặn đó sẽ bị bỏ qua và bạn phải định cấu hình thông tin xác thực cũng như kênh truyền tải theo cách thủ công:

    from google.ads.googleads.v26.services.services import (
        campaign_service as campaign_service_module,
    )
    
    # Dynamic service getter (initializes credentials, transport, and gRPC
    # interceptors automatically).
    campaign_service = client.get_service("CampaignService")
    
    # Direct service client import (requires manual credential and interceptor
    # configuration).
    campaign_service_client = campaign_service_module.CampaignServiceClient(
        credentials=client.credentials,
    )