对于一个学C++的朋友来说,Python类中,哪些是私有成员,哪些是共有成员,估计一直傻傻分不清。

一、本篇博客要解决的问题:

Python类中,哪些是私有成员?哪些是共有成员?

二、 关于Python的类

要想了解Python的类,就必须认识到,当你在Python中写了一个类的时候,你就已经构建了一个新的类型。

所以,你写的类型其本身有属性和方法,而类型对应的实例,也有自己的属性,不过并没有方法。

也就是说,Python中的类,实际上有两层含义,第一层是类本身,第二层是实例。

类型本身有属性和方法,类的属性可以在所有实例中传递,类的方法用来处理实例的数据。

实例本身只有属性,没有方法,属性就是要被类的方法所处理的数据。

Python通过class语句定义一个类,通过__init__(self, *para)构造一个实例,并通过__del__(self)来解构。class是类,self是实例。

三、解决问题。

了解了上面所说的类和实例之后,你可能就已经明白了。Python中类的属性其实就是共有变量,我们称之为类的变量,类的变量可以在所有实例中间传递。而实例的属性则可以大致看成是私有变量,但其实这并不是严格意义上的私有变量,因为我们依然可以通过instance.property来访问并修改这些属性。综上所述:Python中,类的成员,有两种。

1、类成员。可以通过Class.property来调用,也可以通过instance.property来调用,该属性可以在所有实例中传递

2、实例的成员。只能通过instance.property来调用,该属性不与其他实例共享。

3、注意,类的self相当于C++中的指针,但是也有所不同,因为self只指示该实例的数据,不指示类的属性和方法。所以当你需要在类的方法中调用类的属性或者类的其他方法的时候,你需要用类名或者self来指明。但是用类名和用self来指明时,结果是不一样的。详情请见四中的实例代码。

四、示例代码

# -*- coding: utf-8 -*-
# author: zxr
# time: 2019-04-10
# functionality: test class class TestClass:
val = 0
def __init__(self, v):
self.val1 = v def show(self):
print ('-'*60)
print (self.val1) def add_using_classname(self):
self.val1 += TestClass.val
TestClass.show(self) # below code is unvalid
# self.val1 += val
# show() def add_using_self(self):
self.val1 += self.val
self.show() if __name__ == '__main__':
tc = TestClass(1)
tp = TestClass(10)
print (TestClass.val)
print (tc.val)
print (tc.val1)
print (TestClass.val)
print (tp.val)
print (tp.val1)
print ('-'*60) TestClass.val = 2
print ('-'*60)
print (TestClass.val)
print (tc.val)
print (tc.val1)
print (TestClass.val)
print (tp.val)
print (tp.val1)
print ('-'*60) tp.val1 = 3
tc.val1 = 4
tp.val = 30
tc.val = 40
print ('-'*60)
print (TestClass.val)
print (tp.val)
print (tc.val)
print (tp.val1)
print (tc.val1)
tc.add_using_classname()
tp.add_using_classname()
tc.add_using_self()
tp.add_using_self()

test class

总结:Python中的类与C++中的类是不一样的。Python中的每实例化一个实例之后,就拷贝了一个该类的副本,对这个实例的任何修改都不会影响到类。同样的,要想修改类中的属性,也只能在类中修改,在实例中的修改影响不了其他实例。

Python类之类的成员的更多相关文章

  1. 4.1 python类的特殊成员,偏函数,线程安全,栈,flask上下文

    目录 一. Python 类的特殊成员(部分) 二. Python偏函数 1. 描述 2. 实例一: 取余函数 3. 实例二: 求三个数的和 三. 线程安全 1. 实例一: 无线程,消耗时间过长 2. ...

  2. Python 类的特殊成员介绍

    类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...

  3. python类的特殊成员和方法

    变量或方法 描述 调用时机 __init__ 构造方法 通过类创建对象时,即类名() ,自动触发执行 __doc__ 表示类的描述信息   __module__ 表示当前操作的对象在那个模块   __ ...

  4. python - 类的特殊成员

    class Foo: #构造方法 def __init__(self,name,age): pass self.name = name self.age = age def __str__(self) ...

  5. 测试Python类成员的单下划线,双下划线,两头下划线的区别

    首先原谅一个菜鸟叫他“两头下划线”.记得在windows编程中,很多宏定义使用下划线+大写,给人逼格很高的错觉.对于Python下划线的认识,大概是从__dict__这个属性开始的,看__dict__ ...

  6. python 类成员函数

    http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/ 这篇文章总结的非常好 主要注意的地方是 1,在类内调用成员函数 ...

  7. python - 类成员修饰符

    在java,c#类的成员修饰符包括,公有.私有.程序集可用的.受保护的. 对于python来说,只有两个成员修饰符:公有成员,私有成员 成员修饰符是来修饰谁呢?当然是修饰成员了.那么python类的成 ...

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

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

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

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

随机推荐

  1. [C++ Primer Plus] 第8章、函数探幽(一)程序清单——内联、引用、格式化输入输出、模板、decltype

    程序清单8.1(inline内联函数) #include<iostream> using namespace std; inline double square(double x) {// ...

  2. 【spotlight安装监控】

    参考博客: https://www.cnblogs.com/ceshi2016/p/9012646.html http://blog.sina.com.cn/s/blog_1517220f20102x ...

  3. 在CAcUiTabChildDialog中使用点取或者(拾取)时卡住的问题

    问题描述:在Tab的对话框中,其子对话框CAcUiTabChildDialog中用点取或者(拾取)时卡住的问题 在子对话框中: BeginEditorCommand(); CompleteEditor ...

  4. VS2110。VC++编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"

    有时候我们会在头文件当中定义一些全局变量或者全局函数,这种做法会比较方便,但有时候会出现“编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"的链接问题. ...

  5. Blender学习笔记

    本文是根据B站上面,顺子老师的视频学习整理,建模部分,并未设计到渲染,内容整理所得 下载安装,可以直接在blender官网下载,建议下载最新版吧.因为每次软件的更新都会有新的东西出现,在使用中把你的心 ...

  6. MyBatis Generator 自定义生成注释

    注释生成器 为了生成db里面的注释,必须自定义注释生成器 EmptyCommentGenerator: import org.mybatis.generator.api.CommentGenerato ...

  7. Ubuntu16.04安装Anaconda2

    1.下载Anaconda2: 官网上下载相应的版本,我下载的是Anaconda2-2018.12-Linux-x86_64.sh 2.安装Anaconda2: 在文件的目录输入命令:bash Anac ...

  8. 3 - Two Pointers Algorithm

    5. Kth Largest Element (quick sort的变种) https://www.lintcode.com/problem/kth-largest-element/descript ...

  9. LINUX内核PCI扫描过程

    LINUX内核PCI扫描过程 内核版本 3.10.103 1. ACPI热插拔扫描subsys_initcall(acpi_init)@drivers/acpi/bus.c |-acpi_scan_i ...

  10. POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum

    http://poj.org/problem?id=2796 https://nanti.jisuanke.com/t/38228 背景 给定一个序列,对于任意区间,min表示区间中最小的数,sum表 ...