admin管理员组

文章数量:1794759

Python 自学笔记(教程)(九)

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.三处格式,否则终端也会给你报错
# 请运行代码,报错后,修改格式到正确的样式就能运行通过 class ClassName(): var1 = 100 var2 = 200 @classmethod def function1(): print('我不需要使用类属性。') ClassName.function1()

报错:

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