python定义一个类和子类_用class定义类--Python

Python使用class创建对象。没个定义的类都有一个特殊的方法,名为__init__(),可以通过这个方法控制如何初始化对象。

定义类的基本形式:

classAthlete:def __init__(self):#The code to initialize a "Athlete" object.

......

创建对象实例:有了类之后,创建对象实例很容易。只需将对类名的调用赋至各个变量。通过

这种方式,类(以及__init__()方法)提供了一种机制,允许你创建一个定制的工厂函数,

用来根据需要创建多个对象实例。与C++系列语言不同,Python中没有定义构造函数“new”

的概念。Python会为你完成对象构建,然后可以使用__init__()方法定制对象的初始状态。

self的重要性

定义一个类时,实际上是在定义一个定制工厂函数,然后可以在你的代码中使用这个工厂函数

创建实例,即:

a =Athlete()

Athlete().__init__(a)____________________________________________________Athlete为类名,__init__为方法名,a为对象实例的目标标识符。

在类中定义__init__()方法:

def __init__(self):#The code to initialize an "Athlete" object.

......

每个方法的第一个参数都是self

实际上,不仅__init__()方法需要self作为它的第一个参数,类中定义的所有其他方法也是如此。

Python要求每个方法的第一个参数为调用对象实例。下面扩展这个实例类,在一个名为thing的对象

属性中存储一个值,具体值在初始化时设置。另外还要扩充一个方法,名为how_big(),它会利用len()

BIF返回thing的长度:

classAthlete:def __init__(self, value=0):

self.thing=valuedefhow_big(self):return(len(self.thing))---------------------------------------------------------------现在“初始化”代码将所提供的一个值赋至一个名为“self.thing”的

类属性。

how_big() 方法返回“self.thing”的长度。

在一个对象实例上调用类方法时,Python要求第一个参数是调用对象实例,这往往赋至各个方法的self参数。

只凭这一点就足以解释为什么self如此重要,也可以由此说明编写对象方法时为什么所有对象方法的第一个参

数必须是self。

继承Python内置的list

Python的class允许你从零开始创建一个定制类,就像创建Athlete类那样。不过,class还允许通过继承现有的

其他类来创建一个类,这也包括list,set和dict提供的Python内置数据结构类。通过继承创建的这些类称为子类。

classNameList(list):def __init__(self, a_name):

list.__init__([])

self.name=a_name

定义了NameList类之后,用它创建一个对象实例,检查对象类型(使用type()BIF),看看它会提供什么内容(使用dir()BIF):

johnny= NameList("John Paul Jones")>>>type(johnny)

>>>dir(johnny)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__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']

使用list类提供的一些功能来补充Johnny中储存的数据:>>> johnny.append("Bass Player")>>> johnny.extend(["Composer", "Arranger", "Musician"])>>>johnny

['Bass Player', 'Composer', 'Arranger', 'Musician']

johnny.name'John Paul Jones'

>>>vera.name'Vera vi'由于Johnny是一个列表,所以完全可以对它做列表处理:>>> for attr injohnny:print(johnny.name + "is a" + attr + ".")

John Paul Jonesisa Bass Player.

John Paul Jonesisa Composer.

John Paul Jonesisa Arranger.

John Paul Jonesis a Musician.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值