之前一直对__init__(self)里面的参数很迷茫,一会这个地方看到别人这么写,一会看到别人那么写,自己也不知道,到底怎么回事,有哪些区别,今天对这个内容进行了学习。进行系统的分析了解,主要从他的实例化的区别,含义的区别进行区分两者之间的关系!

常见的两种类的定义方式如下:

class Student:
 def init(self):#两者之间的区别
 self.name = None
 self.score = Nonedef init(self, name, score):
 self.name = name
 self.score = score

区别很明显,前者在__init__方法中,只有一个self,指的是实例的本身,但是在方法的类部,包含两个属性,name, score

下面的这个即是在定义方法时,就直接给定了两个参数,

针对这样的两个,之前不解的地方,是如何实例化,第二个很明显就是直接实例化时,传入相应的参数,而第一种,则需要实例化之后,对属性进行赋值

student = Student(“sansan”, 90)

student = Student()
student.name= “sansan”
student.score = 90

susan = Student(“sunny”, 78)

susan = Student()
 susan.name = “susan”
 susan.score = 8

即显示了两种实例化的方法, 注释的部分即是在创建的时候就直接传入参数

那么这两者的区别,在哪里?

第一种的区别,他定义了这样一种类,他可以是一个空的结构,比如学生的表,当学生还没有进行考试时,他已经有了学生的姓名和成绩,当新的数据来的时候,可以直接添加进来。这个可以很方便的进行,

而第二种,则需要必须传值,不允许为空。当然第二种对于已有数据的导入是很方便的,在语句上减少了很多

class Student:
 def init(self):#两者之间的区别
 self.name = None
 self.score = None

def init(self, name, score):

self.name = name

self.score = score

def print_score(self):
 print("%s score is %s" % (self.name, self.score))def get_grade(self):
 if self.score >= 80:
 return “A”
 elif self.score >= 70:
 return “B”
 else:
 return “C”

student = Student(“sansan”, 90)

student = Student()
 student.name= “sansan”
 student.score = 90

susan = Student(“sunny”, 78)

susan = Student()
 susan.name = “susan”
 susan.score = 8student.print_score()
 susan.print_score()
 print(susan.get_grade())
 print(student.get_grade())

以上是一个很简单的,两者比较,

两者都在上述代码中进行了简单的实现,自己进行相应的注释


9-8 权限 : 编写一个名为Privileges 的类, 它只有一个属性——privileges , 其中存储了练习9-7 所说的字符串列表。

将方法show_privileges() 移到这个类中。 在Admin 类中, 将一个Privileges 实例用作其属性。

创建一个Admin 实例, 并使用方法show_privileges() 来显示其权限。

class User():
 def init(self, first_name,last_name):
 self.first_name = first_name
 self.last_name = last_name
 def describe_user(self):
 print(‘用户名称为:’ + self.first_name + self.last_name)
 def greet_user(self):
 print('你好! ’ + self.first_name + self.last_name)class Admin(User):
 def init(self,first_name,last_name):
 super().init(first_name,last_name)
 self.b = Privileges()
 # self.privileges = [‘can add post’,‘can del post’,‘can ban user’]
 def show_privileges(self):
 # print(self.privileges)
 for i in self.privileges:
 print(“管理员权限有:” + i)class Privileges():
 def init(self):
 self.privileges = [‘can add post’,‘can del post’,‘can ban user’]
 def show_privileges(self):
 for i in self.privileges:
 print(“管理员权限有:” + i)Admin1 = Admin(‘Ma’,‘Yun’)
 Admin1.b.show_privileges()