【发布时间】:2019-09-28 02:10:16
【问题描述】:
简单地说,构造函数在Python中重载的最简洁或最常用的方式是什么?
我有 C# 方面的经验,并且是 Python 新手,所以我仍在学习 Python 的最佳实践。
C# 有一种非常简洁的构造函数重载方式,因此我可以处理在初始化时作为参数传递的不同数据类型。我已经看到很多关于如何在 Python 中实现类似结果的不同答案,并且我不希望构造函数中的默认参数或逻辑来处理不同的数据类型!!!我不明白为什么人们推荐这个作为替代方案。
这是一些 C# 代码,我基本上想在 Python 中做同样的事情。
class SomeClass{
int a;
double b;
string c;
public SomeClass(int value1, double value2)
{
a = value1
b = value2
}
public SomeClass(int value1, string value2)
{
a = value1
c = string
}
}
上面的代码只是一个例子。我知道有一些技巧,例如测试参数类型并将此逻辑添加到我的构造函数或接受 Python 不是强类型并在我的类方法中编写逻辑以了解如何处理不同类型的 value2。
但是,我正在编写的代码并不像上面的那么简单。我想处理如何处理不同对象或数据类型的参数。我想重载我的构造函数来处理不同类和数据类型的对象,即我可以传递 MyObject
而且我不想要一个 hacky if 语句来测试 JSON 文件是否通过。这是因为用于传递 CSV 文件的构造函数可能包含更多参数和/或与传递 JSON 文件不同的参数。
我发现 C# 处理重载构造函数的方式更加简洁,因为我以后可以轻松地向 JSON 文件构造函数添加更多参数,而我只需要摆弄一个构造函数!
我确定 Python 有一种非常简洁的方式来实现相同的目标...?
我突然想到,Python 中可能不存在重载,因为它不是静态类型的。因此我假设类方法最适合我的目的。_
class SomeClass(object)
@classmethod
def fromtextfilename(cls, textfile):
# Logic here
return cls(data)
@classmethod
def fromtextfilename(cls, jsonfile):
# Logic here
return cls(data)
__int__(self,data)
# Use data to populate properties
【问题讨论】:
-
Python 没有方法重载。通常,您会使用
@classmethod来使用备用构造函数 -
另外,Python 是强类型的,它只是动态类型而不是静态类型。
-
@Dennis Yer 我确实首先阅读了这个......有很多替代答案,我没有选择投票最多的答案,确实有我需要的答案,类方法只是没有'不包括任何参数,我认为这让我感到困惑......
标签: python