admin管理员组文章数量:1794759
Python 自学笔记(教程)(九)
Python 自学笔记(教程)(九) 类是 对象的模板,得先有了类,我们才能制造各种“对象”,就像我们先有了产品图纸,才能制造各种产品一样
理解类最简单的方式:类是一个函数包,类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量
那么类中如何放置函数和变量呢,我们用class语句来自定义一个类
# 语法:创建一个名为“ClassName”的类,类名一般首字母要大写,(): 不能丢 class ClassName(): # 如定义一个名为'狗'的类,可以写成class Dog(): # 规范:class语句后续的代码块要缩进 def function1(): # 定义类中的函数1既然类是一个函数包,所以一个类中可以放置一堆函数,比如:
class ClassName(): def function1(): print('报道!我是类A的第一个方法!') def function2(): print('报道!我是类A的第二个方法!') def function3(): print('报道!我是类A的第三个方法!')而要使用类中的函数就可以使用类名.函数名()的方法实现,比如:
class ClassName(): def function1(): print('报道!我是ClassName的第一个方法!') def function2(): print('报道!我是ClassName的第二个方法!') def function3(): print('报道!我是ClassName的第三个方法!') ClassName.function1() ClassName.function2() ClassName.function3()屏幕打印:
报道!我是ClassName的第一个方法! 报道!我是ClassName的第二个方法! 报道!我是ClassName的第三个方法!
要在类中放一堆变量可以这样:
class ClassName(): var1 = 100 var2 = -5.83 var3 = 'abc'在类中被定义的变量被称为类的属性。使用类名.变量名的格式,可以把类中的属性的值提取出来,比如:
class ClassName(): var1 = 100 var2 = -5.83 var3 = 'abc' # 这里需要用print语句,才能把提取出的数值打印到屏幕上 print(ClassName.var1) print(ClassName.var2) print(ClassName.var3)屏幕打印:
100 -5.83 abc
类中的属性(变量)也是能改变,使用类名.变量名的格式,可以让我们在类的外面,增加或修改类的属性,比如:
class ClassName(): var1 = 100 var2 = -5.83 var3 = 'abc' ClassName.var1 = 99 ClassName.var4 = '新增一个变量' print(ClassName.var1) print(ClassName.var4)屏幕打印:
99 新增一个变量
当类中放置了函数和变量,类就有了方法和属性,我们可以把类属性打印出来,也可以调用类方法,比如:
class SmartRobot(): bust = 33 # 胸围 waistline = 44 # 腰围 hipcircumference = 55 # 臀围 # 以上为类属性 def greet(): # 打招呼 print('主人你好!') def actingcute(): # 卖萌 print('主人,求抱抱!') def angry(): # 生气 print('主人,我要报警了!') # 以上为类方法 # 把类的属性打印出来 print(SmartRobot.bust) print(SmartRobot.waistline) print(SmartRobot.hipcircumference) # 调用类方法 SmartRobot.greet() SmartRobot.actingcute() SmartRobot.angry()类方法也是函数,它和单独定义函数区别在于:它的调用格式:类.函数名()比函数名()多了一个类.
更重要的是,“类”中的函数可以利用“类”中的变量(也就是类方法可以调用类属性),比如:
# 请直接运行体验代码 class ClassName(): var1 = 100 var2 = 200 @classmethod def function1(cls): print(cls.var1) print(cls.var2) ClassName.function1()屏幕打印:
100 200
这里新出现的@classmethod是声明了下面的函数是类方法,为了把类中的变量传递给类中的函数,我们需要用到3个特定格式:
@classmethod # @classmethod 的中文意思就是“类方法”,@classmethod 声明了 function1 是类方法,这样才能允许 function1 使用类属性中的数据 cls # cls 的意思是 class 的缩写,如果类方法 function1 想使用类属性(也就是类中的变量),就要写上 cls 为 function1 的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据 cls.var # cls.var,类方法想使用类属性的时候,需要在这些变量名称前加上 cls.以上三种特定格式,但凡有任何格式错误都会报错,比如:
- 缺了“@classmethod”,类方法就不能直接利用类中的属性,于是报错
TypeError: function1() missing 1 required positional argument: ‘cls’
- 缺了cls和cls.var,类方法没有和“类”沟通好数据对接,所以不能得到“类”中属性的数据,也会报错
TypeError: function1() takes 0 positional arguments but 1 was given
- 当类中的函数不需要用到类中的变量时,就不要用@classmethod、cls、cls.三处格式,否则终端也会给你报错
报错:
TypeError: function1() takes 0 positional arguments but 1 was given
class SmartRobot(): bust = 33 waistline = 44 hipcircumference = 55 def greet(): print('主人你好!') def actingcute(): print('主人,求抱抱!') def angry(): print('主人,我要报警了!') @classmethod def autosay(cls): print('主人,我的三围是:') print('胸围:' + str(cls.bust)) print('腰围:' + str(cls.waistline)) print('臀围:' + str(cls.hipcircumference)) print('哈哈哈哈哈,下面粗上面细,我长得像个圆锥。') SmartRobot.autosay()屏幕打印:
主人,我的三围是: 胸围:33 腰围:44 臀围:55 哈哈哈哈哈,下面粗上面细,我长得像个圆锥。
版权声明:本文标题:Python 自学笔记(教程)(九) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686751984a98339.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论