如何在Python中将默认的Class类型参数设置为null?

时间:2018-10-20 02:26:46

标签: python parameters

我是C#开发人员的新手,现在要学习python,而且我不太清楚Python函数定义中的类类型参数,尤其是默认null。

在C#中,

我可以将另一个类类型设置为参数,并在当前类函数定义中将其默认值设置为null,如果它不为null,则使用其函数。像这样的东西

mouseuse

但是如果我尝试在python中执行此操作,就像我定义一个函数

public class ClassA{
    public DoSthByA() {
      Console.WriteLine ("I am class A");
    }
    void DoSthWithB (ClassB b=null) {
      if (b != null) {
         b.DoSthByB ();
       }
    }
}
public class ClassB {
  public DoSthByB () {
    Console.WriteLine ("I am class B");
  }
}

系统会警告它是一个没有DoSthByB属性的无类型,我试图搜索它但是没有找到一个好的答案,而且我对python类类型参数不是很清楚,有时感觉就像鸭子打字更多 。只是希望有人可以帮助我,非常感谢〜

1 个答案:

答案 0 :(得分:0)

我做了一个变通方法,现在可以工作了,但是不确定在python中这是否是正确的方法

在测试函数中,我首先声明一个classB类型var class_b_ref,然后取决于函数参数为None还是不将实际引用obj引用传递给class_b_ref

#version 1
def func_in_classA1(self,class_b_parameter=None):
    class_b_ref=ClassB
    if class_b_parameter== None:
        print "the parameter is null"
        return
    else:
        class_b_ref= class_b_parameter

    class_b_ref.DoSthByB()

PS:版本1可以使用,但是提到“ class_b_ref = ClassB”的系统未使用,因为在“ else”中分配了另一个值。我想我仍然尝试使用C#的“广播”习惯,但是Python是一种动态语言,从上面的代码我更改为version2

# Version2:
def func_in_classA2(self,class_b_parameter=None):
    if class_b_parameter== None:
        print "the parameter is null"
        return
    elif isinstance(class_b_parameter,ClassB):
        pass

    class_b_ref.DoSthByB() 

它可以工作,如果有任何更好的或正式的方法可以用Python进行,请通知我。