打电话沟通做网站,外国网站怎么进入,企业微信app下载,推荐几个看黄的网站python 类中一定需要有 __init __方法么#xff1f;没有的会怎样#xff1f;
在回答这个问题之前#xff0c;先说两个问题#xff1a;① 面向对象编程#xff1f;
② 什么是类#xff1f;
面向对象#xff0c;先上一个正式点的解释#xff1a;
“把一组数据结构和处…python 类中一定需要有 __init __方法么没有的会怎样
在回答这个问题之前先说两个问题① 面向对象编程
② 什么是类
面向对象先上一个正式点的解释
“把一组数据结构和处理它们的方法组成对象object把相同行为的对象归纳为类class通过类的封装encapsulation隐藏内部细节通过继承inheritance实现类的特化specialization和泛化generalization通过多态polymorphism实现基于对象类型的动态分派。”
感觉看的云里雾里的。。。。
接下来看看通俗易懂的面向对象是相对于面向过程而提出的程序设计思想面向对象的三大特征封装、继承、多态。 再来看一个有趣的例子来自知乎
不要被标题迷惑写的挺贴切客观的每种方法都有利有弊致胜的法宝永远都是实际情况实际分析。文中虽然没用python做例子但是本质和原理的东西是不变的与用什么语言无关。
说明 以上的内容来自于网络不代表作者本人的观点和看法与作者本人立场无关相关责任不由作者承担。
什么是–类
类是对现实事物的抽象例如人类人有男人、女人但概念还是太大需要继续抽象思考一下人不论男女正常情况都有什么特征例如名字、性别等固定的特征一般用名词来限定属性有什么行为例如人会吃饭、看电影、上厕所等行为方法一般用动词来描述我们将属性和方法给抽象出来一定是普遍的共有的非特指或小范围的就构成了人类这个类Class。
现在来回答开始时提出的问题python 类中一定需要有 __init __方法么没有的会怎样
我们已经知道了类是由属性和方法构成的python类中用__init__方法也可理解为初始化方法来定义属性在实例化一个对象时会先调用__init__方法将这个类所具有的相关属性赋予这个对象然后我们通过这个对象就可以直接访问他所具有的属性。
还是人类这个例子看下面的代码
class Person():#定义一个类def __init__(self,name,gender):#人有名字self.name name#人有性别self.gender genderdef eat(self):#人需要吃饭所以定义一个吃饭的方法print(%s正在吃饭有啥事吃完再说。。。% self.name)def watch_movie(self,movie_name):#还需要娱乐所以定义可以看电影的方法print({}正在看{},这部电影.format(self.name, movie_name))def go_wc(self):#人还需要上厕所不然憋死了所以定义一个上厕所的方法if self.gender 男:#男的上男厕所进错了就是耍流氓女的就是进错了。。。哈哈公平何在print({}要进{}厕所。。。不然就是耍流氓.format(self.name,self.gender) )if self.gender 女:print({}要进{}厕所。。。不然就是走错了.format(self.name,self.gender))if __name__ __main__:#实例化一个人person1 Person(小明,男)#查看这个人的名字print(person1.name)#查看这个人的性别print(person1.gender)#调用吃饭这个方法确保不被饿死person1.eat()#吃完可以看看电影person1.watch_movie(色即是空)#看电影过程中可能需要上厕所person1.go_wc() 再看一下下面的代码
class Person():#定义一个人类#没有__init__方法直接定义行为方法def eat(self,name):#人需要吃饭所以定义一个吃饭的方法print(%s正在吃饭有啥事吃完再说。。。%name)def watch_movie(self,name, movie_name):#看电影print({}正在看{},这部电影.format(name, movie_name))def go_wc(self, name,gender):#上厕所if gender 男:print({}要进{}厕所。。。不然就是耍流氓.format(name,gender))if gender 女:print({}要进{}厕所。。。不然就是走错了.format(name,gender))if __name__ __main__:#实例化一个人貌似其他动物也有这些行为例如二哈不一定是人啊person1 Person()#print(person1.name) 没有名字属性调用报错#print(person1.gender) 没有性别属性调用报错#吃饭person1.eat(小红)#看电影person1.watch_movie(小红,红楼梦)#上厕所person1.go_wc(小红,女) 这个修改版本中去掉了__init__方法这导致这个类没有name和gender属性如果执行printself.name或者printself.gender就会报错而且在调用吃饭看电影、上厕所这些方法时需要传入过多的重复参数增加了代码的冗余。如果不事先知道是定义了一个“人”类在没有相关属性的前提前提下不便于确定这个class是什么毕竟其他动物也会吃饭也可以看电影二哈。。。虽说去掉__init__对于定义这个类并不会报错但为了便于使用和理解应当定义__init__方法。想一想现实生活中什么东西没有属性不可用语言描述但是却有行为。。。怎么感觉怪怪的。。。。
转载链接
https://blog.csdn.net/qq_30597401/article/details/108409239