سؤال

في بيثون، وظائف مثل شارع ()، الباحث ()، تعويم ()، وما إلى ذلك تستخدم عادة لإجراء نوع التحويلات. ومع ذلك، هذه تتطلب منك أن تعرف في الوقت اللازم لتطوير ما اكتب تريد تحويله إلى. A subproblem من بعض رمز بيثون أنا أحاول أن أكتب كما يلي:

ونظرا متغيرين، foo وbar، والعثور على نوع من foo. (ومن غير المعروف في الوقت اللازم لتطوير، وهذا هو رمز عام.) ثم محاولة تحويل bar إلى أي نوع foo هو. إذا كان هذا لا يمكن القيام به، ورمي استثناء.

وعلى سبيل المثال، دعونا نقول لكم استدعاء الدالة أن يفعل هذا conv. سيكون توقيعه تبدو

def conv(foo, bar) :
    # Do stuff.

وسوف يطلق عليه شيء من هذا القبيل:

result = conv(3.14, "2.718")  # result is now 2.718, as a float.
هل كانت مفيدة؟

المحلول

استخدم foo.__class__ للحصول على نوع من foo. ثم يطلق عليه لتحويل شريط لنوع فو:

def conv(foo, bar) :
    return foo.__class__(bar)

وبطبيعة الحال، وهذا يعمل فقط إذا كان نوع من foo لديه منشئ يعرف كيفية تحويل شريط.

نصائح أخرى

والتي سيكون من الأفضل:

type(foo)(bar)
type(foo)

وهو بالتأكيد أفضل، إذا كنت تريد أن تحقق نوع ثم "نوع" هو أفضل وسيلة، وأنا على python 2.7 - 3.2.2, type() يعمل تماما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top