类的所有成员分为:

  公有成员,在任何地方都能访问

  私有成员,只有在类的内部才能访问

私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线。(特殊成员除外,例如:__init__、__call__等)

私有成员和公有成员的访问限制不同:

静态字段:

公有静态字段:类可以访问,类内部可以访问;派生类中可以访问

私有静态字段:仅类内部可以访问

class C(object):
name = '公有静态字段'
__age = '私有静态字段' def func(self):
print(C.name, self.__age) class D(C):
def show(self):
print(self.name) print(C.__age) #错误!类不可直接访问私有静态字段
obj = D()
obj.func() #类内部可以访问
obj.show() #派生类中可以访问公有静态字段,但不可访问私有静态字段

普通字段:
  公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问

  私有普通字段:仅类内部可以访问

class C(object):
def __init__(self):
self.name = '公有普通字段'
self.__age = '私有普通字段' def func(self):
"""类内部可以访问公有和私有字段"""
print(self.name, self.__age) class D(C):
def show(self):
"""派生类内部不可以访问私有字段"""
print(self.name) obj = D()
print(obj.name) #类直接访问公有字段
obj.func() #类内部访问各种字段
obj.show() #派生类中访问公有字段
print(obj._C__age) #私有成员可通过 对象名._类名__属性名称 来访问

方法、属性的访问与上述方式相似,即,私有成员只能在类内部使用
PS:私有成员若非要访问的花,可以通过  对象._类__属性名  来访问

类的特殊成员:

1、__doc__

  表示描述信息

class Foo(object):
"""描述类的信息""" def func(self):
"""描述方法的信息"""
pass print(Foo.__doc__) #打印出类的描述信息
print(Foo.func.__doc__) #打印出方法的描述信息

2、__module__ 和 __class__
  __module__表示当前操作的对象在哪个模块

  __class__ 表示当前操作对象的类是什么

class Foo(object):
def __init__(self):
self.name = 'cable'
from memb import Foo

obj = Foo()
print(obj.__module__)
print(obj.__class__)

3、__init__
  构造方法,通过类创建对象时,自动触发执行。

class Foo(object):
def __init__(self, name):
self.name = name
self.age = 20 obj = Foo('cab') #自动执行类中的__init__方法

4、__del__
  析构方法,当对象在内存中被释放时,自动触发执行。

PS:此方法一般无需定义,因为python时一门高级语言,程序员在使用中无需关心内存的分配和释放,因为此工作都交给Python解释器来执行,所以,析构方法的调用是由解释器在进行垃圾回收时自动触发执行的。

5、__call__

  对象后面加括号,触发执行

  PS:构造方法的执行是由创建对象触发的,即:对象=类名() ;而对于 __call__方法的执行是由对象后加括号触发的,即:对象()或者类()()

class Foo(object):
def __init__(self):
print('starting') def __call__(self, *args, **kwargs):
print('执行__call__') obj = Foo()
obj()

6、__dict__
  类或对象中的所有成员

  类的普通字段属于对象;类中的静态字段和方法等属于类,即:

class Province(object):
country = '中国' def __init__(self, name, count):
self.name = name
self.count = count def func(self, *args, **kwargs):
print('func方法') print(Province.__dict__) #获取类Province的成员
obj1 = Province('山东', '德州')
print(obj1.__dict__) #获取对象obj1的成员
obj2 = Province('黑龙江', '北安')
print(obj2.__dict__) #获取对象obj2的成员

7、__str__
  如果一个类中定义了__str__方法,那么在打印对象的时候,默认输出该方法的返回值。

class Foo(object):
def __str__(self):
return '返回值' obj = Foo()
print(obj) #输出返回值

8、__getitem__ 、  __setitem__ 和 __delitem__ 方法
  用于索引操作,例如字典。以上分别表示获取、设置和删除数据

class Foo(object):
def __getitem__(self, item):
print('getitem', type(item)) def __setitem__(self, key, value):
print('setitem', type(key), type(value)) def __delitem__(self, key):
print('delitem', type(key)) obj = Foo()
res = obj['k1'] #自动触发__getitem__方法
obj[3] = 666 #自动触发__setitem__方法
del obj['k2'] #自动触发__delitem__方法

9、 __getslice__ 、 __setslice__ 和 __delslice__
  这三个方法用于分片操作,但在python3中已经弃用

10、__iter__方法

  用于迭代器,之所以列表、字典、元祖可以进行for循环,是因为类型内部定义了__iter__方法。

class Foo(object):
def __init__(self, value):
self.value = value def __iter__(self):
return iter(self.value) obj = Foo('cable') for i in obj:
print(i)

for循环内部代码如下:

obj = iter([11,22,33,44])

while True:
val = obj.next()
print val

python面向对象之类成员修饰符的更多相关文章

  1. Python面向对象之成员修饰符

    对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...

  2. Python:Day25 成员修饰符、特殊成员、反射、单例

    一.成员修饰符 共有成员 私有成员,__字段名,__方法 - 无法直接访问,只能间接访问 class Foo: def __init__(self,name,age): self.name = nam ...

  3. Python学习 :面向对象 -- 成员修饰符

    成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员  class Info: country = '中国' ...

  4. Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)

    一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中 ...

  5. python学习day20 面向对象(二)类成员&成员修饰符

    1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...

  6. Python面向对象(成员修饰符)

    day25 成员修饰符 class Foo: def __init__(self, name, age): self.name = name self.__age = age#私有,外部无法直接访问 ...

  7. python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】

    python_way day8 一.面向对象三大特性: 多态 二.面向对象中的成员 字段.方法属性 三.成员修饰符 四.特殊成员 __init__.__doc__.__call__.__setitem ...

  8. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

  9. 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

    本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...

随机推荐

  1. JavaScript对象——原型与原型链

    原型与原型链 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 va ...

  2. Centos7环境下 安装ffmage2.7.1过程

    参考http://trac.ffmpeg.org/wiki/CompilationGuide/Centos#FFmpeg 先查看了官方文档,消化以后,开始自己编译ffmage2.7.1,所需要安装包, ...

  3. WeifenLuo.WinFormsUI.Docking.dll的用法

    基本框架 说明 weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠.拖拽等功能.Weif ...

  4. 如何构建ASP.NET MVC4&JQuery&AJax&JSon示例

    背景: 博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax. 步骤: 1,添加控制器(HomeController)和动作方法(Index),并为Inde ...

  5. php 函数的嵌套

    /*一定要小心变量作用域*/ function insert_dynamic() { function bar() { echo "I don't exist until insert_dy ...

  6. Java新人拿到一台新的电脑需要装配什么

    适用对象:新手 装备:win10 一.IDEA 插件等 说明 其他 TranslationPlugin 翻译插件 GitHub地址 MyBatis-Generator 自动生成Mybatis文件 Al ...

  7. groovy实现循环、交换变量、多赋值、?.运算符

    /** * Created by Jxy on 2019/1/3 10:01 * 1.实现循环的方式 * 2.安全导航操作符---?. * 3.一次性赋值给多个变量 */ 0.upto(2){ pri ...

  8. Java CountDownLatch解析(下)

    写在前面的话 在上一篇CountDownLatch解析中,我们了解了CountDownLatch的简介.CountDownLatch实用场景.CountDownLatch实现原理中的await()方法 ...

  9. yum只下载不安装dokcer

    yum install --downloadonly --downloaddir=/test/ docker-io 有三个依赖包,如果不知道现后依赖顺序,可以强制安装 哦了

  10. sc create SVN-Service binpath= "D:\Program Files\Svn\bin\s vnserve.exe --service -r E:\repository\svn" displayname= "SVN-Service" start= au to depend= Tcpip [SC] OpenSCManager 失败 5:

    在安装SVN服务时就会出现如下问题: C:\Users\gushangzao>sc create SVN-Service binpath= "D:\Program Files\Svn\ ...