开发者社区> 问答> 正文

python菜鸟求教一个__init__的问题?报错

在学习python,看到__init__这个地方不太懂,下面是学习资料上的一段代码:

#!/usr/bin/python
# Filename: class_init.py

class Person:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print 'Hello, my name is', self.name

p = Person('Swaroop')
p.sayHi()
输出:

$ python class_init.py
Hello, my name is Swaroop
不太明白__init__方法的必要性

就自己写了一个没用__init__的模块
 #!/usr/bin/python
 # Filename: class_test.py
 
 class Person:
     def sayHi(self, name):
         self.name = name
         print 'Hello, my name is', self.name
 
 p = Person('Swaroop')
 p.sayHi()


报错:

$ python class_test.py
Traceback (most recent call last):
  File "class_test.py", line 9, in <module>
    p = Person('Swaroop')
TypeError: this constructor takes no arguments

 

希望能有前辈给解答一下我自己的代码报错的原因,希望能从程序运行的流程讲解一下__init__的用处。谢谢。

展开
收起
爱吃鱼的程序员 2020-06-22 15:04:16 596 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    用第二个方法是

    1. classPerson:
    2.    defsayHi(self,name):
    3.      self.name=name
    4.      print'Hello,mynameis',self.name


    5. p=Person()
    6. p.sayHi('Swaroop')
    为什么报错的知识点是对象的初始化,可以去查查

    多谢授人以渔

    __init__是你的初始化对象的构造方法,

    def__init__(self,name):
           self.name=name

    会把传进的 'Swaroop'赋给属性name,你去掉 __init__那就是默认你的构造方法不含参数,这时候你在传一个参数进去当然会报错。

    嗯好的谢谢回复 @嘿嘿嘿嘿嘿:建议你去学习下OO的思想,看完就会明白很多。也就是说python就是规定,一个模块里面如果要有参数,就需要放一个__init__在开始是吧。

    http://csscn.org/server/python/ch11s05.html

    看下这个

    __init__就是类似cpp里面的构造函数,和他对应的还有个析构函数__del__


    也谢谢其他热心的朋友。。__init__类似与C++或者Java,C#里面的构造函数,只不过C++,Java,C#里面的this参数是隐藏的,不需要用户显示的写出来,但是在python,this参数(你可以自己命名为任意合法变量名称,不一定是self)需要自己手动显示的定义,并且放在第一个参数。类似的F#语言在定义类的时候也是使用python这种方式,还有其他脚本语言也是这样的。就是说python就是规定模块里面需要放一个__init__在开始吧

    __init__相当于构造函数,而且在Python类中,方法必须带有self参数。。。

    后面的要求觉得有点奇葩哈。。

    详见:

    【整理】Python中:self和__init__的含义+为何要有self和__init__

    2020-06-22 15:04:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载