面向对象出来一个新概念 类也就是class 乍看上去像一个函数 。其实我就可以这么理解 这是一个大函数,里面定义的各种函数其实就是小函数
那么问题来了,为什么好好的函数不用 非要定义一个类?其实很简单 ,在面对一个大工程的时候。一些数据是通用的,我们把这些通用的归为一类则就形成了
class。顾名思义 类就是把所有相同属性的整合一起,俗话说 物以类聚,人以群分嘛
说了这么多 其实并没有切题。这里自己用自己的话剖析以下。
我们把类看成一个服装加工厂(就叫他服装加工类吧)。class(object):
那么有了加工厂 我们需要对外卖衣服吧。可能冬天我只卖羽绒服 但是夏天衣服这么暴力,我不光卖上衣 还卖裤子,鞋子。那么怎么表示我卖的东西呢
__init__(self,xiezi,kuzi,shangyi):函数应运而生。大家可能看程序的时候会注意到不同程序init里面的变量有时候是一个有时候是几个 ,这个是怎么回事呢。
其实定义一个类主要看你解决什么问题。我们把你解决什么问题比作季节 变量多的问题就是夏天 变量少的就是冬天。你比如最后输入为
list_info = Listinfo([44,222,111,333,454,'sss','333'])
输入只有一个变量 就是一个列表,我们就定义 一个变量 相当与是冬天服装厂加工衣服
zm =Student('zhangming',20,[69,88,100])
这里变量有字符串 整形和列表 我们就定义了三个变量 相当与夏天卖衣服
说这么多你这个init什么用 难道只是定义变量的?
其实不然,init函数最大的作用就是把外面的参数传进来 然后贴上自己的标签 就像这个服装加工厂一样 我造的所有衣服 都印有我厂的标签。
用之前学过的知识来说 在class范围内 定义全球变量 如下self.name=name这么已说明 外部变量就传入内部来了
def__init__(self,name,age,score):
self.name=name #name,age,score这三个外部变量,通过self.name这样的变换,相当与把外部变量传入了class内部。
self.age=age #self.name则可以在内部调用了。调用name这变量了 。相当与函数的局部变量变成全局变量。
self.score=score
有了这些变量 我们就可以对class的其他函数进行传入参数处理
有了这些准备 ,我们就还差一个地方就可以明白了。那就是各个不同的车间(函数)里面又有参数是怎么一回事呢?
def del_key(self,numm):
self.numm=numm
del self.num[self.numm]
return self.num
如上程序 又多出来一个numm 这又是咋回事呢 和init定义的参数又有什么联系呢?
其实我们学过函数都知道函数需要定义变量,这里也是一样 这里想要处理函数必须引入一个变量。
虽然我们知道了,但是这个变量和init定义的变量有什么区别和联系呢
联系肯定有的 就像我们造衣服的工具 生产夏天上衣的机器和生产冬天的机器肯定不一样 这里的机器就可以比作两个函数的变量
不同 init相当与把外部变量传入class中 相当与全局变量 函数中变量就是以前的函数变量一样 用来出来具体问题引出来的 引用的话
可以用self.value
废话说了这么多 看两个个具体的程序
class Student(object):
def __init__(self,name,age,score):
self.name=name #name,age,score这三个外部变量,通过self.name这样的变换,相当与把外部变量传入了class内部。
self.age=age #self.name则可以在内部调用了。调用name这变量了 。相当与函数的局部变量变成全局变量。
self.score=score
def get_name(self):
return self.name #这里返回self.name 相当与返回name一样 之所以不直接写name是因为,在这个类的
# 全局变量为self.name name只是通过class传入的。
def get_age(self):
return self.age
def get_score(self): #直接把score看成下面的列表操作就可以了,什么类型的就是什么类型操作
return max(self.score)
zm = Student('zhangming',20,[69,88,100]) #把Student实例化
print(zm.get_score(),zm.get_name(),zm.get_age()) #通过class.method()方法进行操作
class Listinfo(object):
def __init__(self,num):
self.num=num
def add_key(self,keyname):
self.keyname=keyname
if isinstance(self.keyname,int) or isinstance(self.keyname,str):
self.num.append(self.keyname)
return self.num
def get_key(self,num_1):
self.num_1=num_1
if isinstance (self.num_1,int):
return self.num[num_1]
def update_list(self,list_1): #不能定义python的默认参数list
self.list_1=list_1
if type(self.list_1)==list:
return self.num+self.list_1
else:
return("请输入列表类型")
def del_key(self,numm):
self.numm=numm
del self.num[self.numm]
return self.num
list_info = Listinfo([44,222,111,333,454,'sss','333'])
print(list_info.add_key('sdf'))
print(list_info.get_key(3))
print(list_info.update_list([3,57]))
print(list_info.del_key(3))