一. 细分类的组成成员

之前咱们讲过类大致分两块区域,静态字段部分和方法部分。

每个区域详细划分又可以分为:

class A:

    company = '阿里巴巴'          # 静态变量(静态字段)
    __tel = '400xxxxx'              # 私有静态变量(私有静态字段)

    def __init__(self,name,age):             #特殊方法(初始化方法)
        self.name = name              # 对象属性(普通字段)
        self.__age = age                  # 私有对象属性(私有普通字段)

    def func1(self):                  # 普通方法
        pass

    def __func(self):                 #私有方法
        print(666)

    @classmethod                  # 类方法
    def class_func(cls):
        """ 定义类方法,至少有一个cls参数 """
        print('类方法')

    @staticmethod                  #静态方法
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print('静态方法')

    @property                      # 属性
    def prop(self):
        pass

二. 类的私有成员

对于每一个类的成员而言都有两种形式:

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

  私有成员,只有在类的内部才能方法

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

1. 属性

  静态属性

  对象属性

静态字段(静态属性)

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

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

公有静态属性(字段)

class C:
    name = "公有静态字段"

    def func(self):
        print C.name

class D(C):
    def show(self):
        print C.name

C.name             # 类访问

obj = C()
obj.func()         # 类内部可以访问

obj_son = D()
obj_son.show()     # 派生类中可以访问

私有静态属性(字段)

class C:
    __name = "私有静态字段"

    def func(self):
        print C.__name

class D(C):
    def show(self):
        print C.__name

C.__name       # 不可在外部访问

obj = C()
obj.__name      # 不可在外部访问
obj.func()         # 类内部可以访问   

obj_son = D()
obj_son.show()     #不可在派生类中可以访问  

公有对象属性

class C:
    def __init__(self):
        self.foo = "公有字段"

    def func(self):
        print self.foo  # 类内部访问

class D(C):
    def show(self):
        print self.foo # 派生类中访问

obj = C()

obj.foo     # 通过对象访问
obj.func()  # 类内部访问

obj_son = D();
obj_son.show()  # 派生类中访问

私有对象属性

class C:
    def __init__(self):
        self.__foo = "私有字段"

    def func(self):
        print self.foo  # 类内部访问

class D(C):
    def show(self):
        print self.foo # 派生类中访问

obj = C()

obj.__foo     # 通过对象访问    ==> 错误
obj.func()  # 类内部访问        ==> 正确

obj_son = D();
obj_son.show()  # 派生类中访问  ==> 错误

2. 方法

  公有方法:对象可以访问;类内部可以访问;派生类中可以访问

  私有方法:仅类内部可以访问;

公有方法

class C:
    def __init__(self):
        pass

    def add(self):
        print('in C')

class D(C):
    def show(self):
        print('in D')

    def func(self):
        self.show()
obj = D()
obj.show()  # 通过对象访问
obj.func()  # 类内部访问
obj.add()  # 派生类中访问 

私有方法

class C:
    def __init__(self):
        pass

    def __add(self):
        print('in C')

class D(C):
    def __show(self):
        print('in D')

    def func(self):
        self.__show()
obj = D()
obj.__show()  # 通过不能对象访问
obj.func()  # 类内部可以访问
obj.__add()  # 派生类中不能访问

总结:对于这些私有成员来说,他们只能在类的内部使用,不能再类的外部以及派生类中使用.

非要访问私有成员的话,可以通过 对象._类__属性名,但是绝对不允许!!!为什么可以通过._类__私有成员名访问呢?因为类在创建时,如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)它会将其保存在内存时自动在前面加上_类名.

三. 类的其他成员

这里的其他成员主要就是类方法:

方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

实例方法

定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

调用:只能由实例对象调用。

类方法

定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:实例对象和类对象都可以调用。

静态方法

定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

调用:实例对象和类对象都可以调用。

双下方法(后面会讲到)

  定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加爽下划线 __方法名__的具有特殊意义的方法,双下方法主要是python源码程序员使用的,

 我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码。

 调用:不同的双下方法有不同的触发方式,就好比盗墓时触发的机关一样,不知不觉就触发了双下方法,例如:__init__

Python面向对象 | 类的成员的更多相关文章

  1. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  2. Python面向对象(类的成员之属性)

    day24 类的成员之属性 class Foo(): def bar(self): print("bar") @property def per(self): ') return ...

  3. Python面向对象(类的成员之方法)

    day24 类的成员之方法 - 普通方法,保存在类中,由对象来调用,self > 对象 - 静态方法,保存在类中,由类直接调用 - 类方法,保存在类中,由类直接调用,cls > 当前类 c ...

  4. Python面向对象(类的成员之字段)

    day24 类的成员之字段 # 字段         - 普通字段,保存在对象中,执行只能通过对象访问         - 静态字段,保存在类中,  执行 可以通过对象访问 也可以通过类访问 clas ...

  5. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  6. Java面向对象——类的成员

    Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...

  7. python 面向对象(类的特殊成员)

    python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...

  8. Python面向对象-类成员

    类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...

  9. Python学习 :面向对象 -- 类的成员

    类的成员 一.字段 - 字段可以分为'普通字段'和'静态字段'两种 - 普通字段(保存在对象中,执行时只能通过对象来进行访问) - 静态字段(保存在类中,在内存中只保存一份数据(可以有效地节约内存的空 ...

随机推荐

  1. 谈linux服务器运维需要掌握的技能

    一.linux基础 包括对Linux整体的理解/使用和基本命令 二.运维的命令 运维相关的工具(命令) 三.基础服务 LAMP或LNMP :Apache/Nginx,MySQL,PHP/Python/ ...

  2. Spring 注册BeanPostProcessor 源码阅读

    回顾上一篇博客中,在AbstractApplicationContext这个抽象类中,Spring使用invokeBeanFactoryPostProcessors(beanFactory);执行Be ...

  3. 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用

    0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...

  4. Python之——python-nmap的安装与常用方法说明

    一.python-nmap安装 # yum -y install nmap #安装nmap工具# 模块pip方式安装# pip install nmap# 模块源码安装# wget http://xa ...

  5. cmake::编译一个工程

    1.编译工程,构建过程产生的临时文件等文件与源码隔离,避免源码被污染. # CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8) # 项目信息 proj ...

  6. CentOS6.5下搭建文件共享服务(Samba)

    Samba服务: 本内容为samba服务学习者提供参考 案例描述: 某公司的管理员需要搭建SAMBA服务器,IP地址及允许的访问网段自定义.SAMBA服务器的安全级别为user级,所在工作组为WORK ...

  7. ajax 轮询(适合web端二维码请求)

    (前几天 一直弄二维码轮询登录 想了半天 总算弄出来了 分享给大家    ^-^) 轮询: 所谓轮询 肯定需要 setInterval   但是怎么加ajax请求  需要有点小问题而且轮询成功后需要停 ...

  8. jmeter-定时器使用

    在一般性能测试过程中,往往在前一个请求之后等待一段时间再执行下一个请求,这时会用到定时器. 以下列举常用的3中: 1.固定定时器: 2.

  9. 热烈祝贺达孚电子(NDF)网站上线

    尊敬的客户: 您们好! 为适应公司发展的需要,树立公司的良好形象,满足大家更多的了解电容器系列产品及公司的服务,经过1个多月的筹备,在2019年10月21日公司网站正式上线啦,这标志着NDF(达孚电子 ...

  10. 在react项目中使用redux or mobx?

    主要比较参数: 库体积,打包项目体积 开发体验 性能对比 在对比参数前首先分析一下redux和mobx的设计模式,redux和mobx都没有使用传统的mvc/mvvm形式,而且他们使用flux结构也略 ...