写点什么

python- 类,对象 --》多态,封装,继承

用户头像
许有加
关注
发布于: 刚刚
python-类,对象--》多态,封装,继承

self:对象自身

     成员方法可以访问他们要对其特性进行操作的对象本身

私有化:其他程序员是不会知道你的对象内部的具体操作

       例如:ClosedObject 可能会在其他对象改变自己的名字时,给一些管理员发邮件。这个操作应该时 setName 方法的一部分

       但是如果直接使用 c.name 设定名字,是什么都不会发生的。我们要避免这样的事情发生,应该使用 private 特性

       即外部对象无法访问,但 getName 和 setName 等访问器(accessor)

注:python 并不支持私有方式,

    类名.成员与对象.成员是两个毫不相干的,互不干扰的空间

私有方法:方法名前有两个下划线,或者只有一个下划线开头的方法

    两个下划线的名字 都被  “翻译”成前面加上单下划线和类名的形式

    如:#s._Secretive_inaccessible()  

        但在 python3 中,无法访问 s._Secretive_inaccessible()

        会报错:AttributeError: 'Secretive' object has no attribute '_Secretive_inaccessible'

多重继承:multiple inheritance

    除非特别熟悉多重继承,否则应该尽量避免使用,应为有些时候会出现不可预测的麻烦

    特性:先继承的类中的方法会重写后继承的类中的方法


~~~

class Person:

    def setName(self,name):

        self.name = name

    def getName(self):

        return self.name

    def greet(self):

        print("Hello,world! I'm %s." % self.name)

foo =Person()

bar = Person()

foo.setName('Luke Skywalker')

bar.setName('Anakin Skywalker')

foo.greet()

bar.greet()


class MemberCounter:

    members =0

    def init(self):

        MemberCounter.members+=1

m1 =MemberCounter()

m1.init()

print(MemberCounter.members)

m2=MemberCounter()

m2.init()

print(MemberCounter.members)

print('m1.member:',m1.members,'m2.members',m2.members)

m1.members =3

m2.members =8

print('m1.member:',m1.members,'m2.members',m2.members)

m1.init()

print(MemberCounter.members)

m2.init()

print(MemberCounter.members)

print('m1.member:',m1.members,'m2.members',m2.members)

print('id:',id(MemberCounter.members))

print('id:',id(m1.members))

print('id:',id(m2.members))

print('------------------------------------------')

class Secretive:

    def __inaccessible(self):

        print('Bet oyu can\'t see me..')

    def accessible(self):

        print('The secret message is:')

        self.__inaccessible()  

s = Secretive()

#s.__inaccessible()  #'Secretive' object has no attribute '__inaccessible'

#方法__inaccessible() 是私有化方法

#s._Secretive_inaccessible()  AttributeError: 'Secretive' object has no attribute '_Secretive_inaccessible'

s.accessible()

#类的继承

class Filter:

    def init(self):

        self.blocked=[]

    def filter(self,sequence):

        return [x for x in sequence if x not in self.blocked]

class SAMPFilter(Filter):

    def init(self):

        self.blocked=['SPAM']

    def filter(self,sequence):

        return [x for x in sequence if x not in self.blocked]

fFilter()

f.init()

print(f.filter([1,2,3,4]))

s = SAMPFilter()

#print(s.filter(['SPAM#',2,3,4])) #这里提示 has  no attribute ,为什么?因为没有先执行 init 方法

s.init()

print(s.filter(['SPAM',2,3,4]))

#方法 issubclass 函数

# 特性:__bases__ 获取类的基类

#      __class__ 获取当前对象的类名

print(issubclass(Filter,SAMPFilter))

print(issubclass(SAMPFilter,Filter))  #True 后面是前面的基类

print(SAMPFilter.__base__)

print(s.__class__)

用户头像

许有加

关注

还未添加个人签名 2019.02.11 加入

还未添加个人简介

评论

发布
暂无评论
python-类,对象--》多态,封装,继承