Python:重载构造函数的问题
警告:我已经学习 Python 10 分钟了,所以对于任何愚蠢的问题深表歉意!
我编写了以下代码,但是出现以下异常:
消息文件 名称行位置追溯节点 31 异常。类型错误:此构造函数不带参数
class Computer:
name = "Computer1"
ip = "0.0.0.0"
screenSize = 17
def Computer(compName, compIp, compScreenSize):
name = compName
ip = compIp
screenSize = compScreenSize
printStats()
return
def Computer():
printStats()
return
def printStats():
print "Computer Statistics: --------------------------------"
print "Name:" + name
print "IP:" + ip
print "ScreenSize:" , screenSize // cannot concatenate 'str' and 'tuple' objects
print "-----------------------------------------------------"
return
comp1 = Computer()
comp2 = Computer("The best computer in the world", "27.1.0.128",22)
有什么想法吗?
WARNING: I have been learning Python for all of 10 minutes so apologies for any stupid questions!
I have written the following code, however I get the following exception:
Message File
Name Line Position Traceback Node
31
exceptions.TypeError: this constructor takes no arguments
class Computer:
name = "Computer1"
ip = "0.0.0.0"
screenSize = 17
def Computer(compName, compIp, compScreenSize):
name = compName
ip = compIp
screenSize = compScreenSize
printStats()
return
def Computer():
printStats()
return
def printStats():
print "Computer Statistics: --------------------------------"
print "Name:" + name
print "IP:" + ip
print "ScreenSize:" , screenSize // cannot concatenate 'str' and 'tuple' objects
print "-----------------------------------------------------"
return
comp1 = Computer()
comp2 = Computer("The best computer in the world", "27.1.0.128",22)
Any thoughts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我假设您有 Java 背景,因此需要指出一些关键差异。
I'm going to assume you're coming from a Java-ish background, so there are a few key differences to point out.
Python 中的构造函数称为
__init__
。 您还必须使用“self”作为类中所有方法的第一个参数,并使用它来设置类中的实例变量。Constructors in Python are called
__init__
. You must also use "self" as the first argument for all methods in your class, and use that to set instance variables in the class.伙计,给自己买一本Python书吧。 深入研究 Python 非常好。
dude get yourself a python book. Dive into Python is pretty good.
那不是有效的 python。
Python 类的构造函数是
def __init__(self, ...):
并且您不能重载它。您可以做的是使用参数的默认值,例如。
That isn't valid python.
The constructor for a Python class is
def __init__(self, ...):
and you cannot overload it.What you can do is use defaults for the arguments, eg.
首先,请查看此处。
For a start, look here.
有很多事情需要指出:
__init__
。C++:
Python:
There are a number of things to point out:
__init__
.C++:
Python:
啊,这些是新 Python 开发人员常见的问题。
首先,应该调用构造函数:
第二个问题是忘记将 self 参数包含到类方法中。
此外,当您定义第二个构造函数时,您将替换 Computer() 方法的定义。 Python 非常动态,并且很乐意让您重新定义类方法。
如果您不想使参数成为必需的,更Pythonic 的方法可能是使用参数的默认值。
Ah, these are common gotchas for new python developers.
First, the constructor should be called:
Your second issue is forgetting to include the self parameter to your class methods.
Furthermore, when you define the second constructor, you're replacing the definition of the Computer() method. Python is extremely dynamic and will cheerfully let you redefine class methods.
The more pythonic way is probably to use default values for the parameters if you don't want to make them required.
Python 不支持函数重载。
Python does not support function overloading.