Python语言特性纪要(二)——类、对象

你在这里

Python语言特性纪要(二)——类、对象

   (其他python纪要,请参考:

         Python语言特性纪要(一)——变量、类型、语句

         Python语言特性纪要(三)——魔法方法

    )
十一、对象的伪私有机制
Python的没有C/C++,Java等语言的共有、私有关键字:public,private等,取而代之的是伪私有机制name mangling。这种机制并不能真正杜绝外部访问私有变量。例如:
>>> class Test1():
...     __name='I am private'
... 
>>> tt = Test1()
>>> tt._Test1__name
'I am private'

十二、类属性、静态属性、实例属性、类方法、静态方法、实例方法

类对象对应类名,实例对象就是通过类创建的对象。具体关系如下图所示:

举例说明:

>>> class C:

...     count=0 #类属性

...     def __init__(self): # 魔法方法

...         self.name = ‘haha’ # 公有实例属性

...         self.__sex = ‘man’ # 私有实例属性

...     def smile(self): # 公有方法 self指向实例对象

...         pass

...     def __jump(self): # 私有方法

...         pass

...     @classmethod

...     def run(cls): # 类方法 cls 指向类对象

...         pass

...     @staticmethod

...     def msg(): # 静态方法,可以没有参数

...         pass

... 

>>> a=C()

>>> b=C()

>>> c=C()

>>> print(a.count, b.count, c.count)

0 0 0

>>> c.count += 10

>>> print(a.count, b.count, c.count)

0 0 10

>>> C.count += 100

>>> print(a.count, b.count, c.count)

100 100 10

类属性:也称作静态属性,在构造方法外定义,类和实例公有,访问方法可以直接通过 . 取到,通过三个方法也均可以访问到。但是通过实例方法不能修改类属性,在实例方法中,若绑定了self则成为实例的属性,强行覆盖了类属性,此后也不能通过实例访问到改类属性了;如果不绑定就成为临时变量没有意义。

实例属性:实例对象独有,构造方法内添加或创建对象后利用 . 添加。若与类属性同名,覆盖之。

实例方法:传入参数self,可以通过实例调用,也可以通过类名调用,但要将明确的实例作为第一个参数传入。

类方法:@classmethod 且必须传入参数cls。

静态方法:@staticmethod,不用传入参数。

类方法和静态方法均可以修改类属性,二者都可以通过类名或实例调用。

类和对象的一切属性和方法均在以上类型,自动归类。

属性查询优先级:

① __getattribute__(), 无条件调用

② 数据描述符:由 ① 触发调用 (若人为的重载了该 __getattribute__() 方法,可能会调职无法调用描述符)

③ 实例对象的字典(若与描述符对象同名,会被覆盖哦)

④ 类的字典

⑤ 非数据描述符

⑥ 父类的字典

⑦ __getattr__() 方法

著作权归作者所有。商业转载请联系本站作者获得授权,非商业转载请注明出处 ZZKOOK

您可能感兴趣的文章

登录以发表评论

评论

本人不得不安利

 
86
菜菜的头像

博主真的谢谢你

 
87
lucky的头像

楼主真的感谢分享

 
87
李豆豆的头像