[TOC]
类
1、类的定义
类是用来将代码与代码处理的数据相关联,有助于降低复杂性,更易维护代码;
python也提供了一种方法将代码及其处理的数据定义为一个类,一旦有了类,就可以用它来创建(或实例化)数据对象,它会继承类的特性;
在面向对象的世界里,代码通常称为类的方法method,而数据通常称为类的属性attribute,实例化的数据对象通常称为实例instance。
每个对象都由类创建,并共享一组类似的特性。
定义一个类时,实际上是在定义一个定制工厂函数,可以在代码中引用这个函数
2、定义类及使用
Step1:使用class创建对象
class Athlete: #Athlete为类名
def __init__(self):
# the code to initialize a 'Athlete' object
Step2:创建对象实例
将对类名的调用赋至各个变量,通过这种方式,类(以及init())方法提供了一种机制,允许创建一个定制的工厂函数,用来根据需要创建多个对象实例:
a = Athlete()
b = Athlete()
c = Athlete()
d = Athlete()
3、self参数的重要性
是一个方法参数,总是指向当前对象实例
- 目标标识符赋至self参数
- 每个方法的第一个参数都是self
4、例子
class Athlete:
def __init__(self,value = 0):
self.thing = value
def how_big(self):
return(len(self.thing))
>>> d=Athlete("hello")
>>> d.how_big()
5
>>> d
<__main__.Athlete object at 0x03269FB0>
class Athlete:
def __init__(self,a_name,a_dob=None,a_times=[]):
self.name = a_name
self.dob = a_dob
self.times = a_times
>>> d =Athlete('q','2012-6-17',['2.36','2.35'])
>>> b =Athlete('p')
>>> type(d)
<class '__main__.Athlete'>
>>> type(b)
<class '__main__.Athlete'>
#虽然都由d和b都经过了Athlete这个工厂函数处理,但是存储在不同的内存地址上
>>> d
<__main__.Athlete object at 0x02F09F90>
>>> b
<__main__.Athlete object at 0x0336F850>
>>> d.name
'q'
>>> d.dob
'2012-6-17'
>>> d.times
['2.36', '2.35']
>>> b.dob
>>> b.times
[]
子类
1、子类的定义
通过继承现有的其他类来创建一个类,包括用list,set,dict提供的python内置数据结构类。
2、定义子类及使用
- NamedList:新类名
- list:被派生的老类
- list.init([]):初始化所派生的类
- self.name = a_name:把参数赋至属性
>>> class NamedList(list):
def __init__(self,a_name):
list.__init__([])
self.name = a_name
>>> j = NamedList("Jone")
>>> type(j)
<class '__main__.NamedList'>
>>> dir(j)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'name', 'pop', 'remove', 'reverse', 'sort']
>>> j.append('b')
>>> j
['b']
>>> j.name
'Jone'