之前举例子中频繁出现一个单词class,这个单词可以理解为一个工厂(类),
假定是做石膏娃娃的工厂,工厂里包含很多操作间,我们往工厂运输一些原材料(参数,也成为类的属性),进入第一个操作间(函数1,也称为类中方法)挤压形状,第二个操作间(函数1)填色,最后从工厂运输出成品(object和instance)。
那么init操作间里放的就是必须要有的材料--石膏和颜料,如果我们运往工厂石膏10斤,蓝色颜料50克,那么此时的工厂为一个实例instance,再将石膏和颜料输入工厂中造熊猫造型石膏娃娃的车间,输出的是蓝色熊猫石膏娃娃
class User(object):
def __init__(self,name,age):
self.name = name
self.age = age
def GetName(self):
return self.name
def GetAge(self):
return self.age
u = User('kzc',17) ##instance#实例 #init中是必须含有的参数
print (u.GetName()) #KZC # method是依赖于instance的。
print (u) # <__main__.User object at 0x0000019357C20460>
函数
上述例子中频繁出现一个单词 def,这个单词是用来定义函数的,将某些代码带包起来并起个名字,之后喊他的名字就可以进行调用,类似一个操作间。在class里面的function叫method。
例如
def findTheCity(n=12: int, edg: List[List[int]] ) -> int:
定义 小红和爸爸妈妈年龄差(年龄=12:整数,爸爸妈妈年龄:列表)
这句话的意思就是输入小红的年龄,如果你不输入就默认是12岁,输入爸爸妈妈的年龄,
'__init__'
'__init__' 就是告诉这个工厂的限制条件 ,是调用类组建instance时必须填写的内容
class person():
def init (self,name,gender,birth,**kw):
self.name=name
self.gender=genderself.birth=birth
for k,w in kw.iteritems():
setattr(self,k,w)
def sayhi(self):
print('my name is',self.name)
xiaoming = person('xiao Ming','Male','1991-1-1',job='student',tel='18089355',stdid='15010')
xiaohong=person('Xiao Hong','Female','1992-2-2')
此类中name,gender,birth是必须填写的属性,k,w则不必须
self
u = User('kzc',17) ##instance
u.GetName()
在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。在类的代码(函数)中,需要访问当前的实例中的变量和函数,
即,访问Instance中对应的变量(property 'kzc',17 ):Instance.ProperyNam读取之前的值和写入新的值、对应函数(function):u.GetName (),即执行对应的动作。因此需要访问对应的实例Instance对象本身。所以,我们需要用到self。
@cache
缓存是一种空间换时间的策略,缓存的设置可以提高计算机系统的性能。具体到代码中,缓存的作用就是提高代码的运行速度,但会占用额外的内存空间。
在Python的内置模块 functools 中,提供了高阶函数 cache() 用于实现缓存,用装饰器的方式使用:@cache