一. 细分类的组成成员

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

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

classA:

company= ‘阿里巴巴‘ #静态变量(静态字段)

__tel = ‘xxxxxxx‘ #私有静态变量(私有静态字段)

def __init__(self,name,age): #特殊方法(初始化方法)

self.name = name #对象属性(普通字段)

self.__age = age #私有对象属性(私有普通字段)

def func1(self): #普通方法

pass

def __func(self): #私有方法

print(666)

@classmethod#类方法

defclass_func(cls):"""定义类方法,至少有一个cls参数"""

print(‘类方法‘)

@staticmethod#静态方法

defstatic_func():"""定义静态方法 ,无默认参数"""

print(‘静态方法‘)

@property#属性

defprop(self):pass

二. 类的私有成员

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

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

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

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

1. 属性

静态属性

对象属性

静态字段(静态属性)

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

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

公有静态属性(字段)

classC:

name= "公有静态字段"

deffunc(self):printC.nameclassD(C):defshow(self):printC.name

C.name#类访问

obj=C()

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

obj_son=D()

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

私有静态属性(字段)

classC:__name = "私有静态字段"

deffunc(self):print C.__name

classD(C):defshow(self):print C.__nameC.__name #不可在外部访问

obj=C()

obj.__name #不可在外部访问

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

obj_son=D()

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

公有对象属性

classC:def __init__(self):

self.foo= "公有字段"

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

classD(C):defshow(self):printself.foo # 派生类中访问

obj=C()

obj.foo#通过对象访问

obj.func() #类内部访问

obj_son=D();

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

私有对象属性

classC:def __init__(self):

self.__foo = "私有字段"

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

classD(C):defshow(self):printself.foo # 派生类中访问

obj=C()

obj.__foo #通过对象访问 ==> 错误

obj.func() #类内部访问 ==> 正确

obj_son=D();

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

2. 方法

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

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

(1)公有方法

classC:def __init__(self):pass

defadd(self):print(‘in C‘)classD(C):defshow(self):print(‘in D‘)deffunc(self):

self.show()

obj=D()

obj.show()#通过对象访问

obj.func() #类内部访问

obj.add() #派生类中访问

(2)私有方法

classC:def __init__(self):pass

def __add(self):print(‘in C‘)classD(C):def __show(self):print(‘in D‘)deffunc(self):

self.__show()

obj=D()

obj.__show() #通过不能对象访问

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

obj.__add() #派生类中不能访问

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

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

三. 类的其他成员

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

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

实例方法

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

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

类方法

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

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

静态方法

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

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

双下方法(后面会讲到)

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

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

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

python中表示类的公有成员_Python面向对象 | 类的成员相关推荐

  1. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  2. python中try...except的用法_python try...except语句、自定义异常、raise语句使用实例(异常处理的三种方法)...

    异常处理,在编程中是必不可少的.错误难免会发生,用户不可能完全按照开发者的意愿行事,也有一些不可预知的错误,如网络请求等. 而程序一旦遇到异常,就会被终止,并且由底层抛出错误栈,无法按照计划顺利执行. ...

  3. python 中关于无法导入自己写的类。解决方法

    python 中关于无法导入自己写的类.解决方法 参考文章: (1)python 中关于无法导入自己写的类.解决方法 (2)https://www.cnblogs.com/jc-home/p/1209 ...

  4. python中模块是什么意思_Python中的模块是什么?3分钟搞懂Python中的模块问题

    Python 中的模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,模块让你能够有逻辑地组织你的 Python 代码段.把相关的代码分配到一个模块里能 ...

  5. python中oo是什么意思_python中的OO

    写给自己的备忘,很浅显,可能只是句法方面的事,不涉及OO思想之类的,因为OO思想是共通的,并没有python的OO思想一说 PS 示例代码来自<python简明教程> 继承 python中 ...

  6. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  7. python中异或怎么算_python 异或运算的前提_异或运算公式

    Python基础(10)–数字-Python-第七城市 609x288 - 73KB - JPEG Python基础(10)--数字_资讯_突袭网 609x288 - 33KB - JPEG pyth ...

  8. python中如何创建类的对象_python面向对象中如何建立具体的对象?

    我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...

  9. python面向对象类创建人物类包含姓名、职业_python面向对象类

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

最新文章

  1. Apache+php+tomcat+mysqlon linxu
  2. 【DND图形库】四、文本绘制和按键检测
  3. 昨天登陆页面,无法进入后台,今天攻克了
  4. .NET Framework 4.8发布
  5. 前端学习(905):js执行机制
  6. BugkuCTF-MISC题telnet
  7. 001mongodb数据库介绍002mongodb的增删改查003数据导入导出
  8. 使用git在本地电脑与远程GitHub/gitlub库中clone别人的github上的远程仓库代码,找资源
  9. 【java】Java 动态调试技术原理及实践
  10. qt widget设置边框_Qt开源作品16-通用无边框拖动拉伸
  11. android 6.0 蓝牙进程,Android6.0-蓝牙权限问题
  12. 启动工程Ehcache报错
  13. Python学习笔记之 循环,列表生成式,生成器,迭代器
  14. Xshell6、Xftp6【官方免费版】下载
  15. UPS电源扩展功能一UPS干节点通讯接口扩展板,你了解吗?
  16. PHP 微信公众号和html5接入微信支付
  17. IPA第八届少儿模特明星盛典 福州赛区 初赛圆满收官
  18. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】...
  19. 教你一波Lucas(卢卡斯)定理在数论解题中的应用
  20. 使用python语言调用科大讯飞离线语音合成

热门文章

  1. 关于函数泰勒展开的关键知识点深入分析
  2. 神经网络怎么解决过拟合,解决神经网络过拟合
  3. 机器学习实战:逻辑回归(2)-从疝气病症预测病马的死亡率
  4. 不用PS怎样修改电脑图片分辨率?试试这个方法
  5. adaboost算法的matlab实现,Adaboost算法
  6. HTML手机自动连接问题,airpods自动连接不上怎么办_airpods打开后不自动连接的解决方法...
  7. 基于asp.net328驾校考试车管所违章查询系统
  8. java 新浪股票接口api_[Java教程]【API】新浪天气接口 Beta
  9. Broken Necklace ( USACO1.1.4 破碎的项链)
  10. PHP_VERSION的意思,php指的是_PHP_VERSION指什么