การเติมโค้ดอัตโนมัติใน IDE

IDE เช่น VS Code และ PyCharm มีฟีเจอร์การเติมโค้ดอัตโนมัติในตัว สำหรับภาษา Python

ไลบรารี google-ads-python จะสร้างคลาสข้อความ protobuf แบบไดนามิก ในขณะรันไทม์โดยใช้ วิธีการ Getter ในคลาส GoogleAdsClient ซึ่งอาจขัดขวางฟีเจอร์การเติมโค้ดอัตโนมัติของ IDE ที่อาศัยการวิเคราะห์ ซอร์สโค้ดแบบคงที่

หากต้องการปรับปรุงความเข้ากันได้กับเครื่องมือการเติมโค้ดอัตโนมัติที่อาศัยการวิเคราะห์แบบคงที่ คุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้

  1. ใช้คำอธิบายประกอบประเภทกับวิธีการ Getter แบบไดนามิก (แนะนำ)
  2. นำเข้าคลาสข้อความ protobuf และไคลเอ็นต์บริการโดยตรง

การนำเข้าแบบไดนามิกพร้อมคำแนะนำประเภท

การใช้การนำเข้าแบบไดนามิกช่วยให้โค้ดของคุณมีความยืดหยุ่นเมื่อมีการอัปเดตไลบรารี การเพิ่มคำอธิบายประกอบประเภทจะช่วยให้การเติมโค้ดอัตโนมัติของ IDE ทำงานได้โดยไม่สูญเสียประโยชน์ของการเริ่มต้นใช้งานแบบไดนามิก

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")

การนำเข้าโดยตรง

นอกจากนี้ คุณยังนำเข้าคลาสข้อความ protobuf ได้โดยตรงด้วย วิธีนี้ช่วยให้การเติมโค้ดอัตโนมัติของ IDE ทำงานได้ทันทีโดยไม่ต้องใช้วิธีการ 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()

ข้อเสียของการนำเข้าโดยตรง

แม้ว่าการนำเข้าคลาสที่สร้างขึ้นโดยตรงจะช่วยในการเติมโค้ดอัตโนมัติ แต่ก็มีข้อเสียบางประการดังนี้

  1. ค้นหาได้ยากขึ้น: บางครั้งก็ไม่ชัดเจนว่าคลาสหนึ่งๆ อยู่ในโมดูลใด ดังนั้นการค้นหาเส้นทางการนำเข้าที่ถูกต้องจึงอาจเป็นเรื่องยาก
  2. เปราะบางเมื่อมีการอัปเกรด: โครงสร้างไดเรกทอรีของคลาสที่สร้างขึ้นอาจเปลี่ยนแปลงไปเมื่อมีการออกไลบรารีของไคลเอ็นต์เวอร์ชันใหม่ หากคุณนำเข้าคลาสโดยตรง โค้ดของคุณอาจหยุดทำงานเมื่อคุณอัปเกรด ในขณะที่โค้ดที่ใช้วิธีการ Getter จะไม่ได้รับผลกระทบจากการเปลี่ยนแปลงประเภทนี้
  3. ต้องเริ่มต้นใช้งานด้วยตนเอง: เมธอด get_service จะเริ่มต้นใช้งานบริการด้วยการตรวจสอบสิทธิ์ การตั้งค่าการรับส่งข้อมูล และตัวสกัดกั้น gRPC (ซึ่งแนบส่วนหัว เช่น login-customer-id และ linked-customer-id, จัดการการบันทึก และแสดงข้อผิดพลาดใน GoogleAdsException) ก่อนที่จะแสดงผล หากคุณนำเข้าและสร้างอินสแตนซ์ของบริการโดยตรง ระบบจะข้ามตัวสกัดกั้นเหล่านั้น และคุณต้องกำหนดค่าข้อมูลเข้าสู่ระบบและช่องทางการรับส่งข้อมูลด้วยตนเอง

    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,
    )