【转】python中def __init__(self, name等多参数)与 def __init__(self)的区别

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

常见的两种类的定义方式如下:
class Student:
def init(self):#两者之间的区别
self.name = None
self.score = None

def 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 = 8

student.print_score()
susan.print_score()
print(susan.get_grade())
print(student.get_grade())

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

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

PS:另一个参考文章链接:https://blog.csdn.net/qq_26005373/article/details/99942134

该问题来源于课后习题:

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()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值