今天在熟悉了Python基础的数据结构和操作后,翻开了类的新章节,可以用Python写Leetcode啦!
**
类的定义
**
#-coding=utf8-
class class_name:
count = 0 #类变量,即静态成员
def __init__(self,name,val): #这是类的构造函数
self.name = name #普通成员变量的调用方式
self.val = val
class_name.count += 1 #类变量的调用方式
def display(self): #这是类的成员函数
print "name is %s" %self.name
print "count is %d" %class_name.count
**
对象的定义与调用
**
tmp = class_name("xiaofang",18)
tmp.display()
print tmp.name
会得到如下结果:
name is xiaofang
count is 1
xiaofang
甚至在主函数中我们还可以修改或删除已经定义好的对象:
tmp.val = 17 #修改tmp对象的val成员
del tmp.val #删除tmp对象的val成员
**
对象的销毁
**
同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。
在Python内部记录着所有使用中的对象各有多少引用。
一个内部跟踪变量,称为一个引用计数器。
当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是”立即”的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。
在下面的代码中我们定义析构函数并让他打印内容:
#-coding:UTF8-
class Point:
def __init__( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__ #Python的内置类属性
print class_name, "销毁"
pt1 = Point() #引用计数为1
pt2 = pt1 #增加引用计数
pt3 = pt1 #增加引用计数
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1 #减少引用计数
del pt2 #减少引用计数
del pt3 #减少引用计数
得到结果:
3083401324 3083401324 3083401324
Point 销毁
我们发现,Python中的对象析构只有当引用计数变为0 时才调用(如备注所示)
**
类的继承
**
需要注意的地方:继承语法 class 派生类名(基类名)://… 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
在python中继承中的一些特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作”多重继承” 。
语法:
派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]):
'Optional class documentation string'
class_suite
Reference
1、http://www.runoob.com/python/python-object.html