python class的问题
1#_*_coding:utf-8_*_2classA(object):3def__init__(b,c):4b.c=c5defd(b):6foreinb.c:7prin...
1 # _*_ coding:utf-8 _*_ 2 class A(object): 3 def __init__(b, c): 4 b.c=c 5 def d(b): 6 for e in b.c: 7 print e 8 9 f=A(['一', '二', '三', '四']) 10 g=A(['五', '六', '七', '八']) 11 12 f.d() 13 g.d()请问:第三行的__init__(b, c)有什么作用?为什么要放两个参数?第四行的b.c=c是什么意思?第五行的d()函数的参数为什么是b,而不是c或者其他?第六行的for循环,为什么是in b.c而不是in b或者in c?第九行是什么意思?第十二行在调用d()函数时,为什么不带参数?整个程序的工作流程是什么?
展开
3个回答
展开全部
这个程序没有遵从python的惯例,所以可能对你的理解产生一些问题。
__init__(b, c)和d(b)是class A的方法,按照惯例,第一个参数应该写为self,因为类在调用它的方法的时候会自动把实例作为第一个参数传到它的方法。所以,第一个参数b,其实调用时候的class A的实例。
b.c = c,其实就是给当前实例添加一个属性c,c就是传进来的参数
同理,d()函数的第一个参数当然可以是其他,只是代表当前实例而已
for循环中它是循环初始化时传进来的参数,因为在初始化时把该参数记录到了属性c中,所以是b.c
所以,class A改写为如下代码,可能你就明白了
class A(object):
def __init__(self, c):
self.c=c
def d(self):
for e in self.c:
print e
第九行就是为了获得class A的实例,所以传入初始化参数['一', '二', '三', '四']来初始化以获得实例
因为之前说过了,class中的方法第一个参数是会自动传入为当前实例,所以调用时第一个参数是不需要传的,因此调用d()函数时,不需要带参数
这个程序只是定义了一个类A,它初始化是需要传入参数c,并且参数c是可以循环的。类A提供了方法d,用来打印参数c的内容
之后的几行代码只是实例化了类A,并进行了方法调用而已
展开全部
__init__ 相当与C++的构造函数。就是创建A实例时会自动调用的方法。
python 的类方法第一个参数都是类实例自己。这里的代码都明名为 b。一般用 self 这样的名字会清楚点。调用的时候给的参数不用显式给第一个参数。
b.c = c 就是将类实例的 c 变量赋值为 c。类方法访问类变量要用self.xx 这样方式访问。
d 方法的第一个变量也是类实例自己,访问类全局变量要通过类实例引用,所以访问 c 要用 b.c。
所以是 for e in b.c。
第9,10行就是 创建 A 实例f和g。创建时要给一个变量。
代码用一个数组作为参数了。然后会自动调用 __init__将变量传送给全局变量 c(用b.c的方式存取)。__init__ 只有一个参数,第一个 b 是隐式的类实例引用,不用提供作为参数。
调用 d 是没有参数的。声明时的参数是隐式的self变量,外部调用不用传的。
工作流程就是9,10行创建类实例,提供一个数组作为参数。构造函数 __init__ 将参数传给类全局变量 c。d 的时候遍历 c 并逐一显示。
python 的类方法第一个参数都是类实例自己。这里的代码都明名为 b。一般用 self 这样的名字会清楚点。调用的时候给的参数不用显式给第一个参数。
b.c = c 就是将类实例的 c 变量赋值为 c。类方法访问类变量要用self.xx 这样方式访问。
d 方法的第一个变量也是类实例自己,访问类全局变量要通过类实例引用,所以访问 c 要用 b.c。
所以是 for e in b.c。
第9,10行就是 创建 A 实例f和g。创建时要给一个变量。
代码用一个数组作为参数了。然后会自动调用 __init__将变量传送给全局变量 c(用b.c的方式存取)。__init__ 只有一个参数,第一个 b 是隐式的类实例引用,不用提供作为参数。
调用 d 是没有参数的。声明时的参数是隐式的self变量,外部调用不用传的。
工作流程就是9,10行创建类实例,提供一个数组作为参数。构造函数 __init__ 将参数传给类全局变量 c。d 的时候遍历 c 并逐一显示。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个错误的意思是说它需要一个参数,而你给了0个,在toss中加一个self,即toss(self).
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询