*args不太了解
class C:def __init__(self, *args):
if not args:
print("并没有传入参数")
else:
print("传入了 %d 个参数,分别是:" % len(args), end='')
for each in args:
print(each, end=' ')
如以上代码所示,题目要求定义一个类,当实例化该类的时候,自动判断传入了多少个参数,并显示出来。
1.我想问一下括号里面的*args用在这里是什么意思他是如何起作用的?我翻了一下前面课的笔记有一个*params这两个参数有什么区别或者作用吗
2.为什么括号里面是*args到了下面判断的时候就用的是args了呢 1,可变参数啊,你如果传入1,2,3,4,5,那么args就是(1,2,3,4,5)
2,*只是一个运算符,不是参数名称。
3,params只是个变量名
1.我想问一下括号里面的*args用在这里是什么意思他是如何起作用的?我翻了一下前面课的笔记有一个*params这两个参数有什么区别或者作用吗
没区别和作用,定义参数时候 带上 * 号 那么就是不确定传参数量的传入,最后以元组形式储存在参数中
比如你这里的 *args 我们假设 x = C(1,2,3,4,5,6) 我们实例化对象给 x 然后任意传入了参数,那么这些参数就会被储存在 args 元组中
所以 此时 args 参数 = (1,2,3,4,5,6) , 主要作用是有无 * 号 而不是参数名哈~
2.为什么括号里面是*args到了下面判断的时候就用的是args了呢?
*号就是代表 args 这个参数可以填入任意的意思,当然你后来的 *args 是解包的意思,将容器内的元素全部取出
Twilight6 发表于 2020-6-22 15:09
没区别和作用,定义参数时候 带上 * 号 那么就是不确定传参数量的传入,最后以元组形式储存在参数中
...
class Word(str):
'''存储单词的类,定义比较单词的几种方法'''
def __new__(cls, word):
# 注意我们必须要用到 __new__ 方法,因为 str 是不可变类型
# 所以我们必须在创建的时候将它初始化
if ' ' in word:
print "Value contains spaces. Truncating to first space."
word = word[:word.index(' ')] #单词是第一个空格之前的所有字符
return str.__new__(cls, word)
你好顺便问一下这个代码中的最后一行return语句的作用的必要性和作用是什么啊?返回一个函数还是方法?有啥用? @Twilight6 波大大12138 发表于 2020-6-22 15:24
class Word(str):
'''存储单词的类,定义比较单词的几种方法'''
__new__ 将返回实例化对象给 __init__ Twilight6 发表于 2020-6-22 15:41
__new__ 将返回实例化对象给 __init__
实例化对象?在这里具体指的是哪一个啊? 波大大12138 发表于 2020-6-22 16:08
实例化对象?在这里具体指的是哪一个啊?
实例化对象 就是指a= C() 这个过程时候 Twilight6 发表于 2020-6-22 16:09
实例化对象 就是指a= C() 这个过程时候
那这个new方法最后返回的是 return str.__new__(cls,word)没有你说的那个实例化对象啊?这个咋看 波大大12138 发表于 2020-6-22 16:13
那这个new方法最后返回的是 return str.__new__(cls,word)没有你说的那个实例化对象啊?这个咋看
这个类写好了 功能全部都是在你实例化对象后才体现的
就算你类中全是错误 语句 (不是错误语法),没实例化类之前,也不会报错
页:
[1]