之前一直对__init__(self)里面的参数很迷茫,一会这个地方看到别人这么写,一会看到别人那么写,自己也不知道,到底怎么回事,有哪些区别,今天对这个内容进行了学习。进行系统的分析了解,主要从他的实例化的区别,含义的区别进行区分两者之间的关系!
常见的两种类的定义方式如下:
1 class Student: 2 def __init__(self):#两者之间的区别 3 self.name = None 4 self.score = None
1 def __init__(self, name, score): 2 self.name = name 3 self.score = score
区别很明显,前者在__init__方法中,只有一个self,指的是实例的本身,但是在方法的类部,包含两个属性,name, score
下面的这个即是在定义方法时,就直接给定了两个参数,
针对这样的两个,之前不解的地方,是如何实例化,第二个很明显就是直接实例化时,传入相应的参数,而第一种,则需要实例化之后,对属性进行赋值
1 # student = Student("sansan", 90) 2 student = Student() 3 student.name= "sansan" 4 student.score = 90 5 6 # susan = Student("sunny", 78) 7 susan = Student() 8 susan.name = "susan" 9 susan.score = 8
即显示了两种实例化的方法, 注释的部分即是在创建的时候就直接传入参数
那么这两者的区别,在哪里?
第一种的区别,他定义了这样一种类,他可以是一个空的结构,比如学生的表,当学生还没有进行考试时,他已经有了学生的姓名和成绩,当新的数据来的时候,可以直接添加进来。这个可以很方便的进行,
而第二种,则需要必须传值,不允许为空。当然第二种对于已有数据的导入是很方便的,在语句上减少了很多
1 class Student: 2 def __init__(self):#两者之间的区别 3 self.name = None 4 self.score = None 5 6 # def __init__(self, name, score): 7 # self.name = name 8 # self.score = score 9 10 def print_score(self): 11 print("%s score is %s" % (self.name, self.score)) 12 13 def get_grade(self): 14 if self.score >= 80: 15 return "A" 16 elif self.score >= 70: 17 return "B" 18 else: 19 return "C" 20 21 # student = Student("sansan", 90) 22 student = Student() 23 student.name= "sansan" 24 student.score = 90 25 26 # susan = Student("sunny", 78) 27 susan = Student() 28 susan.name = "susan" 29 susan.score = 8 30 31 student.print_score() 32 susan.print_score() 33 print(susan.get_grade()) 34 print(student.get_grade())
以上是一个很简单的,两者比较,
两者都在上述代码中进行了简单的实现,自己进行相应的注释