[英]Mimic C# classes in Python
我有以下C#公共类:
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是一种动态类型的语言。 变量的类型只有在分配了值之后才能确定。
您最接近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是动态(而非静态)类型的,因此
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
的实例TypeX
。
但是,从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
这不会影响代码的运行方式(特别是不会在运行时强制类型),但可以帮助开发人员及其工具更好地理解代码。
可以使用诸如mypy
工具通过这些可选的类型提示来静态检查代码,尤其是将它们添加到测试套件中时。 添加的提示越多, mypy
可以提供的帮助越多。
Python不是静态类型的语言,因此答案如下:
如何将var2强制为TypeX类型?
你不吗 ? 当然,您可以进行类型检查,但是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.