《Python基础教程》[挪]Magnus Lie Hetland——学习笔记(7)

第七章  创建对象

7.1 对象的魔力

       多态性(Polymorphism):

              方法—绑定到对象上的函数

              更多的方法(行为)称为多态,包括各种运算和函数

       封装性(Encapsulation)—封装是对全局作用域中其他区域隐藏多余信息的原则。

              多态是让用户对于不知道是什么类的对象进行方法调用—方法

              封装是可以不用关心对象是如何构建的而直接进行使用—特性

              注:对象的状态由特性描述,对象的方法可以改变特性。

       继承性(Inheritance)

              从父类继承方法,避免再写一次。

7.2 类和类型

       :所有的对象都属于某一个类,称为类的实例。类分子类和超类(父类)

       创建类:__metaclass__=type                     #确定使用新式类(3.0后无旧式类)

                            class Person:                                         #定义类的名称

                                     def setName(self,name):          #定义方法(函数)和特性等

                                               self,name=name

                                     def getName(self):

                                               return self.name

                            >>>foo=Person()

                            >>>foo.setName(‘Shen Jianliang’)

                            >>>foo.name                                         #访问特性

注:self的用处:在调用方法/函数时,foo自动将自己作为第一个参数传入函数,没有self,成员方法就无法访问对象本身

特性、函数和方法:方法(更专业一点可称为绑定方法)将它们的第一个参数绑定到所属的实例上,因为这个参数可以不必提供。

self 参数并不取决于调用方法的方式。

私有化让方法或者特性变为私有,外部无法访问,在其名字之前加双下划线,类内部可以访问。在类内部定义中,所有以双下划线开始的名字都被翻译成前面加上单下划线和类名的形似。

类的命名空间:类命名空间可以在类内所有成员访问,类的定义实际上就是执行代

码块。

>>> __metaclass__=type

>>> class MemberCounter:

                            members=0

                            def init(self):

                                     MemberCounter.members+=1

>>> m1=MemberCounter()

>>> m1.init()                  #运行一次

>>> MemberCounter.members       

1

>>> m2=MemberCounter()

>>> m2.init()                                         #运行两次

>>> MemberCounter.members

2

>>> m1.members              #类作用域内的变量可以被所有实例访问

2

>>> m1.members='two'               #重定义m1的作用域变量,m2被屏蔽

>>> m1.members

'two'

>>> m2.members

2

指定超类:子类可以扩展超类的定义,将其他类名写在class语句后的()内可以指定超类,将方法继承过来,或者重新定义超类的某些方法。

       >>>class filter:

                            def function(self)

                                     …

                            def filter()

         >>>class spamfilter(filter):       #filter是超类

                            def function(self)               #重新定义超类的方法

         >>>s=spamfilter()

         >>>s.init()

         >>>s.filter(…)                                   #filter是从超类中继承而来的,子类中不需要再写

调查超类:使用issubclass(子,超)来判断,返回true/false

                 也可以使用__bases__特性来寻找父类

                 isinstance(对象,类)检查对象是否是类的实例

                 也可以用__class__特性检查对象所属哪个类

多个超类:子类可以不做任何事(pass),但可以指定多个超类,并继承所有的行为

                    也称为多重继承,需要注意超类的顺序,先继承的类中的方法会重写后

继承的类的方法。

       接口和内省:公开的方法和特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言京谅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值