python中init使用,python中init方法的作用
python类中必须有__init__方法吗?如果不这样会怎么样?在回答这个问题之前,我先说两个问题: 面向对象编程?。
什么是类?
面向对象,先解释最后一个正式点:
“把一组数据结构和处理它们的方法做成对象,把行为相同的对象分成类,通过类的封装隐藏内部细节,通过继承实现类的特化和泛化,通过多态实现基于对象类型的动态赋值。”
我感觉在雾中。
接下来,我们来看一下易于理解的面向对象编程思想,它是相对于面向过程而提出的。面向对象有三个特点:封装,继承,多态。
再举一个有趣的例子,来自知乎:
别被标题迷惑了,挺贴切客观的。每种方法都有其优缺点,制胜法宝永远是对实际情况的实际分析。smdzjy虽然不用python做例子,但是不管用什么语言,事物的本质和原理都是不变的。
说明:以上内容来源于互联网,不代表作者本人观点和看法,与作者本人立场无关。相关责任不由作者承担。
什么是类?
类是真实事物的抽象,比如人类。人有男有女,但概念还是太大了。要不断抽象。想想人(无论男女)在正常情况下都有哪些特征,比如姓名、性别等固定特征。一般受名词限制(属性)。人有哪些行为,比如吃饭、看电影、上厕所(方法)我们抽象出属性和方法(必须是普遍的、共同的、不特定的或小范围的),构成了人类的‘类’(Class)。
现在来回答一下开头提出的问题:python类中有必要有__python 类中一定需要有 __init__方法吗?如果不这样会怎么样?
我们已经知道,类是由属性和方法组成的。python类使用__init__ method(也可以理解为初始化方法)来定义属性。在实例化一个对象的时候,它会先调用__init__方法把这个类的相关属性赋予这个对象,然后我们就可以通过这个对象直接访问它的属性了。
或者人类的例子,看看下面的代码:
类Person():#定义一个类def _ _ init _ _ (self,name,gender): #人有名字self.name=name #人有性别self。Gender=gender def eat (self): #人需要吃饭,所以定义一种吃饭方式print(%s是吃饭,吃完再说吧。%自我。name) def watch _ movie (self,movie _ name): #你还需要娱乐,所以定义一种看电影的方式print({}正在看{},这部电影!。格式(自我。name,movie _ name)) def go _ wc (self): #人还是要上厕所的,不然会窒息,所以定义一个上厕所的方式如果self.gender== male: #男的上男厕所,进错了就是流氓,女的进错了。哈哈,有多公平?打印( {}要去{}厕所。否则就是流氓。格式(自我。名字,自我。性别))如果自我。gender== female: print({}想去{}厕所。否则,就是错误的。格式(自我。名字,自我。gender)) if _ _ name _ _= _ main _ _: #实例化一个人person1=Person(满意的河马,男)#检查这个人的姓名印(person1.name) #检查这个人的性别印(person1.gender) #调用这个方法确保你不会饿死person1.eat() #吃完饭就可以看电影person1.watch_movie(色空)#看电影的过程中你可能需要上厕所person1.go_wc
再看下面的代码:
类Person():#定义一个人类#没有__init__方法,直接定义行为(方法)def eat(self,name): #人需要吃饭,所以定义一个吃饭的方式print(%s是吃饭,吃完再说。% name) def watch _ movie (self,name,movie _ name): #观看电影打印( {}正在观看{},这部电影!。format (name,movie _ name)) def go _ WC (self,name,gender): #上厕所如果gender== male: print({}想上{}厕所。否则就是流氓行为。format(name,gender))如果gender== female: print({}想去{}厕所。否则,这是错误的。format (name,gender)) if _ _ name _ _= _ _ main _: #实例化一个人。似乎其他动物也有这些行为,比如哈尔,它不一定是人。person 1=person 1()# print(person 1 . name)没有名称属性,Error #print(person1.gender)没有性别属性。错误#吃饭的人1 .吃饭( xsdxy) #看电影的人1 .手表_电影( xsdxy ,《红楼梦)#上厕所的人1.go_wc(xsdxy ,女)
在修改后的版本中,删除了__init__方法,这导致该类没有名称和性别属性。如果执行print(self.name)或print(self.gender ),将会报告错误。而且在调用吃饭、看电影、上厕所的方法时,需要传入太多重复的参数,增加了代码的冗余。如果事先不知道定义了一个“人”类,那么在没有相关属性的情况下,就不方便确定这个类是什么。毕竟,其他动物也可以吃东西和看电影(哈尔)。虽然移除__init__不会在定义该类时产生错误,但是__init__方法应该定义为易于使用和理解。想想现实生活中什么东西没有属性(无法用语言描述),却有行为。感觉怪怪的。(来自ngd作者的简单理解。如有错误或不足之处,请指出。互相学习,共同进步!)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。