Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中模拟C#类_C#_Python_Python 2.7 - Fatal编程技术网

在Python中模拟C#类

在Python中模拟C#类,c#,python,python-2.7,C#,Python,Python 2.7,我有以下公共课程: public class ClassA { public byte var1; public TypeX var2; } public class TypeX { public UInt16 num1; public UInt32 num2; } (在本例中,名称简化为非真实名称) 这在Python中是什么样子的?具体来说,如何将var2创建为TypeX的实例 到目前为止,我已经提出了以下Python类: class ClassA():

我有以下公共课程:

public class ClassA
{
    public byte var1;
    public TypeX var2;
}


public class TypeX
{
    public UInt16 num1;
    public UInt32 num2;
}
(在本例中,名称简化为非真实名称)

这在Python中是什么样子的?具体来说,如何将
var2
创建为
TypeX
的实例

到目前为止,我已经提出了以下Python类:

class ClassA():
    def __init__(self, var1, var2 = TypeX):
        self.var1 = var1
        self.var2 = var2


class TypeX():
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

然而,我几乎100%肯定这是不对的。
ClassA
是否应该继承
TypeX
?任何指导或解释将不胜感激

Python是动态类型化的,而不是静态类型化的,所以

class ClassA():
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2


class TypeX():
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
这是一件合理的事情。在实例化
ClassA
时,只需传入一个
TypeX
实例

但是,从Python3.5开始,您可以添加

这不会影响代码的运行方式(特别是它不会在运行时强制执行类型),但它可以帮助开发人员及其工具更好地理解代码


像这样的工具可以用来使用这些可选类型提示静态检查代码,特别是当您将它们添加到测试套件中时。添加的提示越多,mypy就越有帮助。

Python是动态键入的,而不是静态键入的,所以

class ClassA():
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2


class TypeX():
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
这是一件合理的事情。在实例化
ClassA
时,只需传入一个
TypeX
实例

但是,从Python3.5开始,您可以添加

这不会影响代码的运行方式(特别是它不会在运行时强制执行类型),但它可以帮助开发人员及其工具更好地理解代码


像这样的工具可以用来使用这些可选类型提示静态检查代码,特别是当您将它们添加到测试套件中时。添加的提示越多,mypy的帮助就越多。

Python是一种动态类型语言。变量的类型只有在赋值后才能确定

最接近C代码的方法是使用Python 3.5+支持的类型提示:

class TypeX:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

class ClassA:
    def __init__(self, var1, var2: TypeX):
        self.var1 = var1
        self.var2 = var2

但是,即使使用类型提示,
var2
的类型也不会在编译时或运行时强制执行。

Python是一种动态类型语言。变量的类型只有在赋值后才能确定

最接近C代码的方法是使用Python 3.5+支持的类型提示:

class TypeX:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

class ClassA:
    def __init__(self, var1, var2: TypeX):
        self.var1 = var1
        self.var2 = var2

但是,即使使用类型提示,
var2
的类型也不会在编译时或运行时强制执行。

Python不是静态类型语言,因此以下问题的答案是:

如何强制var2为TypeX类型

你没有。当然,您可以键入check,但是Python解释器不会为您这样做,您需要以编程方式在代码中显式地编写此规则

关于如何解决以下问题:

public class ClassA
{
    public byte var1;
    public TypeX var2;
}


public class TypeX
{
    public UInt16 num1;
    public UInt32 num2;
}
翻译成Python,答案很简单:

# You need to explicitly initialize the variables to their correspondent default values
class ClassA(object):
    def __init__(self):
        self.var1 = bytes() # or b''
        self.var2 = None

class TypeX(object):
    def __init__(self):
        self.num1 = int() # or 0
        self.num2 = int() # or 0

Python不是静态类型的语言,因此以下问题的答案是:

如何强制var2为TypeX类型

你没有。当然,您可以键入check,但是Python解释器不会为您这样做,您需要以编程方式在代码中显式地编写此规则

关于如何解决以下问题:

public class ClassA
{
    public byte var1;
    public TypeX var2;
}


public class TypeX
{
    public UInt16 num1;
    public UInt32 num2;
}
翻译成Python,答案很简单:

# You need to explicitly initialize the variables to their correspondent default values
class ClassA(object):
    def __init__(self):
        self.var1 = bytes() # or b''
        self.var2 = None

class TypeX(object):
    def __init__(self):
        self.num1 = int() # or 0
        self.num2 = int() # or 0

它们不是等价的,因为你没有给你的c变量赋值。当您试图从
ClassA
访问
var1
var2
时,会出现
NullReferenceException
。这可以用构造函数很容易地解决。它们不是等价的,因为你没有给你的c变量赋值。当您试图从
ClassA
访问
var1
var2
时,会出现
NullReferenceException
。这可以用构造函数很容易地解决。没错,我知道Python没有强制类型。感谢您对
\uuuu init\uuuu
中变量赋值的说明。我假设
bytes()
int()
键入发送给
self的任何值。
。。。对于
var2
,是否无法执行
=TypeX()
?我猜不是,但为什么?@CtrlS确实有可能。但是它与你的C代码并不完全匹配。顺便说一句,
bytes()
int()
不进行任何类型转换。它们与写
b''
0
有趣的东西完全一样。。。这就是为什么注释是这样的。对,我知道Python没有强制类型。感谢您对
\uuuu init\uuuu
中变量赋值的说明。我假设
bytes()
int()
键入发送给
self的任何值。
。。。对于
var2
,是否无法执行
=TypeX()
?我猜不是,但为什么?@CtrlS确实有可能。但是它与你的C代码并不完全匹配。顺便说一句,
bytes()
int()
不进行任何类型转换。它们与写
b''
0
有趣的东西完全一样。。。这就是为什么评论是这样的。