python类一定要有__init__()方法吗

Python类中的__init__方法用于初始化对象的属性,使得实例化时能为对象赋值。若缺少__init__,类将无法直接设置属性,调用属性或方法时会导致错误,增加代码冗余。示例展示了有无__init__方法的对比,强调了__init__的重要性。
部署运行你感兴趣的模型镜像

什么是–类?

类是对现实事物的抽象,例如人类,人有男人、女人,但概念还是太大,需要继续抽象,思考一下人(不论男女)正常情况都有什么特征,例如名字、性别等固定的特征,一般用名词来限定(属性),有什么行为,例如人会吃饭、看电影、上厕所等行为(方法),一般用动词来描述,我们将属性和方法给抽象出来(一定是普遍的,共有的,非特指或小范围的),就构成了人类这个"类"(Class)。

现在来回答开始时提出的问题:python 类中一定需要有 __init __方法么?没有的会怎样?

我们已经知道了,类是由属性和方法构成的,python类中用__init__方法(也可理解为初始化方法)来定义属性,在实例化一个对象时,会先调用__init__方法,将这个类所具有的相关属性赋予这个对象,然后我们通过这个对象,就可以直接访问他所具有的属性。

还是人类这个例子,看下面的代码:

class Person():
	#定义一个类
    def __init__(self,name,gender):
    	#人有名字
        self.name = name
        #人有性别
        self.gender = gender
    def 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属性,如果执行print(self.name)或者print(self.gender)就会报错,而且在调用吃饭,看电影、上厕所这些方法时需要传入过多的重复参数增加了代码的冗余。如果不事先知道是定义了一个“人”类,在没有相关属性的前提前提下不便于确定这个class是什么,毕竟其他动物也会吃饭,也可以看电影(二哈)。。。虽说去掉__init__对于定义这个类并不会报错,但为了便于使用和理解应当定义__init__方法。想一想现实生活中什么东西没有属性(不可用语言描述),但是却有行为。。。怎么感觉怪怪的。。。。

原文链接:https://blog.youkuaiyun.com/qq_37980828/article/details/103768351

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python中不写`__init__`方法会有以下影响和使用情况: ### 影响 - **属性定义方面**:通常`__init__`方法用于定义的属性,在实例化对象时将相关属性赋予对象,不写`__init__`方法就没有专门用于初始化属性的方法。不过,属性仍可以在其他方法中定义,但需要在调用该方法后对象才会拥有相应属性。例如: ```python class MyClass: def set_attributes(self, value): self.value = value obj = MyClass() # 此时obj没有value属性 obj.set_attributes(10) # 调用方法后obj有了value属性 print(obj.value) ``` - **实例化过程**:实例化对象时,不会执行初始化操作。正常情况下,实例化时会先调用`__new__`方法创建对象,再调用`__init__`方法初始化属性,不写`__init__`方法就跳过了属性初始化这一步 [^2]。 ### 使用情况 - **简单工具**:当只是提供一些工具方法,不需要管理特定状态或属性时,可不写`__init__`方法。例如,一个用于数学计算的: ```python class MathUtils: @staticmethod def add(a, b): return a + b @staticmethod def subtract(a, b): return a - b result = MathUtils.add(3, 5) print(result) ``` - **子继承与扩展**:在子继承父时,如果父已经有合适的`__init__`方法,子不需要额外的初始化操作,就可以不写`__init__`方法。例如: ```python class ParentClass: def __init__(self, value): self.value = value class ChildClass(ParentClass): pass child = ChildClass(20) print(child.value) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值