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 自学笔记(教程)(九)
发布评论