对很多没有其他语言基础的初学者来说,可能学到 python 的类定义的时候会苦恼很久
但,无论我们遇到什么困难,也不要怕,微笑着面对他,消除恐惧的最好办法就是面对恐惧,坚持,才是胜利,加油,奥利给!!!
今天就给大家浅谈一下 class 中遇到的小问题吧
1、首先类的对象是什么时候产生的?
当类被定义完成时,类定义就变成了类的对象,可以通过 “类名.属性” 或 “类名.方法名()” 引用或使用相关的属性或方法
>>> class I:
def text(self,x):
print('%d'%(x**2))
>>> O = I()
>>> O.text
<bound method I.text of <__main__.I object at 0x0000018820ABCB38>>
>>> O.text(3)
9
2、类的属性可以将类的方法覆盖
当给 O.text 赋值时,O.text(obj) 就会报错,因为 O.text 将 O.text() 覆盖
>>> class I:
def text(self,x):
print('%d'%(x**2))
>>> O = I()
>>> O.text(4)
16
>>> O.text = 5
>>> O.text(4)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
O.text(4)
TypeError: 'int' object is not callable
>>> O.text
5
3、注意类属性和实例属性的区别
>>> class I:
count = 1
def text(self)
self.a = 2
self.b = 3
self.c = 4
I.num = 5
count 和num 就是类属性(静态变量),a,b,c则是实例属性
4、Error——传参错误
>>> class I:
def text():
print('abc')
>>> O = I() %默认将O的值传给I(),作为I() 的参数
>>> O.text()
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
O.text()
TypeError: text() takes 0 positional arguments but 1 was given
因为python中的 “类.obj()” 需要实例才可以使用,上述代码中python 就会默认将O的值传给 I() ,所以再调用 O.text() 时就是报错
TypeError: text() takes 0 positional arguments but 1 was given
%需要0个参数,但是已经传入1个参数
所以应该在 def text() 加入实例对象
>>> class I:
def text(obj):
print('abc')
>>> O = I()
>>> O.text()
abc