Python学习笔记_9:class 类定义的属性与方法——详解

对很多没有其他语言基础的初学者来说,可能学到 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
发布了27 篇原创文章 · 获赞 59 · 访问量 7365

猜你喜欢

转载自blog.csdn.net/qq_45504119/article/details/104731744
今日推荐