Python类之类的成员
对于一个学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类之类的成员的更多相关文章
- 4.1 python类的特殊成员,偏函数,线程安全,栈,flask上下文
目录 一. Python 类的特殊成员(部分) 二. Python偏函数 1. 描述 2. 实例一: 取余函数 3. 实例二: 求三个数的和 三. 线程安全 1. 实例一: 无线程,消耗时间过长 2. ...
- Python 类的特殊成员介绍
类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...
- python类的特殊成员和方法
变量或方法 描述 调用时机 __init__ 构造方法 通过类创建对象时,即类名() ,自动触发执行 __doc__ 表示类的描述信息 __module__ 表示当前操作的对象在那个模块 __ ...
- python - 类的特殊成员
class Foo: #构造方法 def __init__(self,name,age): pass self.name = name self.age = age def __str__(self) ...
- 测试Python类成员的单下划线,双下划线,两头下划线的区别
首先原谅一个菜鸟叫他“两头下划线”.记得在windows编程中,很多宏定义使用下划线+大写,给人逼格很高的错觉.对于Python下划线的认识,大概是从__dict__这个属性开始的,看__dict__ ...
- python 类成员函数
http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/ 这篇文章总结的非常好 主要注意的地方是 1,在类内调用成员函数 ...
- python - 类成员修饰符
在java,c#类的成员修饰符包括,公有.私有.程序集可用的.受保护的. 对于python来说,只有两个成员修饰符:公有成员,私有成员 成员修饰符是来修饰谁呢?当然是修饰成员了.那么python类的成 ...
- Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)
一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中 ...
- python 面向对象(类的特殊成员)
python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...
随机推荐
- 设计模式理解(八)结构型——装饰者模式(记得加上UML图 --- 未完)
一段时间没写,又忘了,晕...设计模式这种东西一定要经常用. 装饰者模式(Decorator)用于动态地给一个对象增加一些额外的职责,就增加功能来说,他比生成子类更为灵活. 装饰者模式的原则是: 能用 ...
- wordpress安装教程
最近安装了wordpress来搭建自己的网站,过程有些艰辛,以防以后转移服务器再次遇到这个难题,在此记下自己的这次安装过程以及一些问题,同时也供遇到相同问题的初次接触者做参考. 另外说明一下我用的操作 ...
- java中的循环方法(附带本人遇到的坑)
java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: 1.while 循环 2.do...while 循环 3.fo ...
- 课后作业机票,赌骰子游戏,switch的使用实例
一,课后第三题机票 package com.bd22; import java.util.Scanner; public class AirTicket { public static void ma ...
- git Remote: HTTP Basic: Access denied Git failed with a fatal error.
解决方案: git clone 项目失败,报下面的错误信息: $ git clone http://192.168.0.141/xxxx.git Cloning into 'appEnterprise ...
- 将vmware虚拟机转换成qcow2格式的方法
将vmware虚拟机转换成qcow2格式的方法 http://blog.51cto.com/13570993/2074071 关于qemu安装出现的问题 1.配置qemu是出现can't find p ...
- 6、Docker存储卷
Why Data Volumes? 来自马哥教育 Data volumes Volume types 绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定. docker管理卷:在容器内指定挂载 ...
- Linear Regression with machine learning methods
Ha, it's English time, let's spend a few minutes to learn a simple machine learning example in a sim ...
- Pandas 基础(15) - date_range 和 asfreq
这一节是承接上一节的内容, 依然是基于时间的数据分析, 接下来带大家理解关于 date_range 的相关用法. 首先, 引入数据文件: import pandas as pd df = pd.rea ...
- JDK内置工具使用