Python笔记 class中的__init__()方法

Python中的init的含义

之前一直不理解__init__()方法的作用核意义,今天看了一些别人写的博客,对这个内容学习了一下。

init()方法有两个方面的重大意义:1. 在对象生命周期中初始化;每个对象必须正确初始化后才能正常工作。2. init()参数值可以有多种形式。

__init__有点像C#中的构造函数,在类实例创建后立即调用。

class Student:
    def __init__(self,number):
        self.number=number 
    def student_number(self):
        print('number:',self.number)
        
student=Student(34)
student.student_number()

在这里,我们把__init__方法定义为有一个参数number和self,它创建一个新域number,self为指向类本身。这个过程中,通过self.number=number将数据封装在类中,调用时直接时直接通过类Student进行调用。

那么,如果不用__init__()方法定义类会怎么样呢? geerniya在他的博客对这块内容作了如下解释:

  1. 不用__init__()方法定义类
class Student:
    def student_info(self,name,number):
        print('name: {}, number: {}'.format(name,number))
                
student=Student()
student.student_info('zhang',34)
print(student.__dict__)

输出结果为

name: zhang, number: 34
{}

虽然不用__init__()方法也能正常实现要求,但查看这个实例的属性竟然是空的。在实例化对象的时候,student=Student()的参数是空的,只有在调用函数的时候才指定,并且类中定义的方法都有参数,明显不是很便捷。

  1. 用__init__()方法定义类
class Student:
    def __init__(self,name,number):
        self.name=name
        self.number=number
        
    def student_info(self):
        print('name: {}, number: {}'.format(self.name,self.number))
        
student=Student('zhang',34)
student.student_info()
print(student.__dict__)

输出

name: zhang, number: 34
{‘name’: ‘zhang’, ‘number’: 34}

定义完后,每个实例都有自己的属性(name,number),可以直接调用类中的函数。

init(self,参数)和__init__(self)区别

  1. 定义
    两种类型的init定义方式如下
class Person:
#     def __init__(self):
#         self.name=None
#         self.gender=None
#         self.age=None
    
    def __init__(self,name,gender,age):
        self.name=name
        self.gender=gender
        self.age=age
         
    def print_info(self):
        if str.lower(self.gender)=='female':
            print('Her name is {}, she is {} years old'.format(self.name,self.age))
        elif str.lower(self.gender)=='male':
            print('His name is {}, he is {} years old'.format(self.name,self.age))
        else:
            print('ERROR')

前者__init__()方法中只有self,但在方法的类部包含三个属性。而后者在定义方法的时候,直接给定两个参数。
2. 实例化
两者的实例化方法如下:

#person=Person()
#person.name='lisa'
#person.gender='female'
#person.age=18
#person.print_info()

person2=Person('lisi','male',20)
person2.print_info()

两者的主要区别:
前者定义类可以是一个空结构,当有输入进来的时候再添加相应的数据
后者则必须传值,不予许为空值,例如

person2=Person()
person2.print_info()

输出将会报错

TypeError: init() missing 3 required positional arguments: ‘name’, ‘gender’, and ‘age’

相关博客和学习网站

[1] 廖雪峰官网https://www.liaoxuefeng.com/wiki/1016959663602400/1017496031185408
[2]详细解读Python中的__init__()方法https://www.cnblogs.com/insane-Mr-Li/p/9758776.html
[3] python学习——类中为什么要定义__init__()方法.https://blog.csdn.net/geerniya/article/details/77487941
[4]python def init(self, name等多参数), def init(self)https://blog.csdn.net/m0_37693335/article/details/82972925

  • 70
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonclass类的用法的__init__()方法是一个特殊的方法,用于在创建类的实例时进行初始化操作。\[2\]这个方法会在每次创建类的实例时自动调用,并且可以接受参数来初始化实例的属性。\[2\] __init__()方法的作用是给实例对象设置初始值,可以在方法内部使用self来引用实例对象本身,然后通过self来设置实例的属性。\[2\]通过在__init__()方法定义属性,可以确保每个实例都有自己的属性,并且可以直接调用类的其他函数。\[2\] 举个例子,假设我们有一个Person类,我们可以使用__init__()方法来初始化实例的name、gender和age属性,并且定义一个print_info()方法来打印实例的信息。\[2\] ```python class Person: def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age def print_info(self): if str.lower(self.gender) == 'female': print('Her name is {}, she is {} years old'.format(self.name, self.age)) elif str.lower(self.gender) == 'male': print('His name is {}, he is {} years old'.format(self.name, self.age)) else: print('ERROR') ``` 在这个例子,我们可以通过创建Person类的实例,并传入name、gender和age参数来初始化实例的属性。然后我们可以调用print_info()方法来打印实例的信息。\[2\] 另外,如果不使用__init__()方法来定义类,也可以手动定义其他方法来初始化实例的属性。\[3\]例如,我们可以定义一个student_info()方法来初始化实例的name和number属性。\[3\] ```python class Student: def student_info(self, name, number): self.name = name self.number = number student = Student() student.student_info('zhang', 34) print(student.__dict__) ``` 在这个例子,我们创建了一个Student类的实例,并调用student_info()方法来初始化实例的name和number属性。然后我们可以通过打印实例的__dict__属性来查看实例的属性。\[3\] 总结来说,__init__()方法是在创建类的实例时进行初始化操作的特殊方法,通过在方法内部使用self来引用实例对象本身,并通过self来设置实例的属性。这样可以确保每个实例都有自己的属性,并且可以直接调用类的其他函数。如果不使用__init__()方法来定义类,也可以手动定义其他方法来初始化实例的属性。 #### 引用[.reference_title] - *1* *2* *3* [Python笔记 class的__init__()方法](https://blog.csdn.net/weixin_40650484/article/details/97391376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值