Python学习笔记 class中的__init__()方法
Python中的init的含义
init()方法有两个方面的重大意义:
- 在对象生命周期中初始化;每个对象必须正确初始化后才能正常工作。
- 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在他的博客对这块内容作了如下解释:
- 不用__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()的参数是空的,只有在调用函数的时候才指定,并且类中定义的方法都有参数,明显不是很便捷。
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)区别
- 定义
两种类型的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’
转载自: Python笔记 class中的__init__()方法_-白开水-的博客-CSDN博客_class init