我有以下 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
吗?任何指导或解释将不胜感激!
答案 0 :(得分:2)
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
的类型也不会在编译时或运行时强制执行。
答案 1 :(得分:1)
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
是合理的事情。实例化TypeX
时只需传递ClassA
的实例。
但是,从Python 3.5开始,您可以添加optional type hints,例如
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
的帮助就越多。
答案 2 :(得分:1)
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