对于一个学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# 调用Python库 最简单方法

    起个头,技术性文章应该言简意赅(因我看到外国回答问题都是可以一句代码解决的,绝不会写第二句),实现功能无误再贴出文章. 首先我不用 IronPython来写这个.py文件,因为我有Pycharm,而且 ...

  2. elasticsearch_.net_client_nest2.x_到_5.x常用方法属性差异

    目录: Elasticsearch .net client NEST 5.x 使用总结 elasticsearch_.net_client_nest2.x_到_5.x常用方法属性差异 Elastics ...

  3. js随机数的取整

  4. Python三大神器:装饰器,迭代器,生成器

    一.装饰器 由于一个函数能实现一种功能,现在想要在不改变其代码的情况下,让这个函数进化一下,即能保持原来的功能,还能有新的"技能",怎么办? 现已经存在一个自定义的函数func1, ...

  5. Selenium常见问题

    1.使用python打开Chrome浏览器时,出现Chrome正受到自动测试软件的控制的提示 解决: 在浏览器配置里加个参数,忽略掉这个警告提示语,disable_infobars option = ...

  6. cron表达式总结

    cron表达式用于配置cronTrigger的实例,在定时任务中会用到cron表达式.cron表达式实际上是由七个子表达式组成.这些表达式之间用空格分隔. 可通过工具校验:http://cron.qq ...

  7. jenkins构建成功,但war包没有发布到tomcat下

    如题,jenkins构建成功,在jenkins的workspace中有生成的war包,但没有发布到tomcat的webapps目录. 构建日志 找了很多原因发现应该还是项目相对路径不对导致的,我的wa ...

  8. Redis(四)-持久化

    1.Redis将所有数据存储在内存中,从内存同步到磁盘上,就做持久化过程. 2.持久化有两种方式:rdb(Redis Database)和aof(Append of file) # rdb持久化方法: ...

  9. hive参数配置详细

    hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...

  10. Mysql报错[Warning] TIMESTAMP with implicit DEFAULT value is deprecated和Buffered warning: Changed limits

    报错2019-04-24 12:06:46 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use -- ...