类的理解和运用
函数和类的区别:
类,最简单的方式就是:类是一个变量和函数的集合,如↓图
由此我们可以看出类可以把变量和函数包括在一起。
当然我们包装也不是毫无目的的包装,我们会把同性质的包装在一个类里,这样就方便我们重复使用。
类定义语法格式如下:
class ClassName():
<statement-1>
.
.
.
<statement-N>
这里可以看出,我们用‘class’语句来自定义一个类,就好比我们用’def’来定义一个函数
class ClassA():
var1 = 100
var2 = 0.01
var3 = '两点水'
def fun1():
print('我是 fun1')
def fun2():
print('我是 fun1')
def fun3():
print('我是 fun1')
↑就是类的一个使用范例,里面的类名叫做ClassA,变量称之为属性‘var’,除此之外还有类方法‘fun’.
如何调用类的属性和方法↓
当我们想在同一类里面用类方法调用类属性时,需在类方法上打出@class(类)method(方法),用于声明下面的函数是类函数,这个步骤是不能省去的,否则则会显示出错。
如果没有声明是类方法,方法参数中就没有cls , 就没法通过 cls获取到类属性。
因此类方法,想要调用类属性,需要以下步骤:
- 在方法上面,用 @classmethod 声明该方法是类方法。只有声明了是类方法,才能使用类属性
- 类方法想要使用类属性,在第一个参数中,需要写上cls , cls 是 class 的缩写,其实意思就是把这个类作为参数,传给自己,这样就可以使用类属性了。
- 类属性的使用方式就是cls.变量名
记住喔,无论是@classmethod 还是cls ,都是不能省去的。
省了都会报错。
当想在类中增加元素时,则如下图,在方法后加入你所想增加的参数.
当想修改类里面的变量(类属性)时,可以从类方法来修改,可以修改及增加你类里面的变量↓
修改类属性
print(‘原来的 var1 的值为: ‘ + cls.var1)
cls.var1 = input(‘请输入修改 var1 的值: ‘)
print(‘原来的 var1 的值为: ‘ + cls.var1)
cls.var2 = input(‘请输入修改 var2 ,请为他赋值为: ‘)
print(‘原来的 var2 的值为: ‘ + cls.var2)
新增类属性
ClassA.var3 = input(‘请输入新增类属型 var3 的值: ‘)
print(ClassA.var3)
类的实例化
class ClassA(object):
var1 = ‘两点水’
def fun1(Self):
print(‘var1 值为:’ = self.var1)
# 实例化
a = ClassA()
# 实例化后使用里面的方法
a.fun1()
# 使用里面的属性
print(a.var1)
主要的不同点有:
- 类方法里面没有了 @classmethod 声明了,不用声明他是类方法
- 类方法里面的参数 cls 改为self
- 类的使用,变成了先通过 实例名=类 的方式实例化对象,为类创建一个实例,然后再使用 实例名.函数 的方式调用对应的方法 ,使用实例名.变量名 的方法调用类的属性
类属性的改变
# 改变类属性
ClassA.var1 = ‘三点水’
# 重新打印实例化对象 a 的属性
print(a.var1)
当类属性改变事,实例属性也会跟着改变;反之实例属性改变时,类属性并不会跟着改变.
# 打印类的属性值
print(ClassA.var1)
修改类方法
# 修改类方法
# 1.先要定义一个新函数
def newFun1(self):
print(‘hello python’)
# 2.用新的函数替代老的函数,也就是[重写类方法]
ClassA.fun1 = newFun1
# 再次调用实例的方法
a.fun1()
newFun1()
如上类方法改变时,实例方法也会跟着改变
在这个例子中,我们需要改变类方法,就用到了类的重写。
我们使用了类.原始函数=新函数 就完成了类的重写了
但是要注意此处的赋值是替换而不是调用函数,所以不能加上括号.