python的类与子类

[TOC]

1、类的定义
类是用来将代码与代码处理的数据相关联,有助于降低复杂性,更易维护代码;
python也提供了一种方法将代码及其处理的数据定义为一个类,一旦有了类,就可以用它来创建(或实例化)数据对象,它会继承类的特性;
在面向对象的世界里,代码通常称为类的方法method,而数据通常称为类的属性attribute,实例化的数据对象通常称为实例instance。
每个对象都由类创建,并共享一组类似的特性。
定义一个类时,实际上是在定义一个定制工厂函数,可以在代码中引用这个函数

image.png

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()

image.png

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>
image.png
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'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容