1.面向对象结构分析:
----面相对象整体大致分为两块区域:
--------第一部分:静态字段(静态变量)部分
--------第二部分:方法部分
--每个大区域可以分为多个小部分:
class A:cooname = 'Jake'  # 静态变量(静态字段)__cooage = 20  # 私有静态变量(私有静态字段)def __init__(self, name, age):  # 普通方法(构造方法)self.name = name  # 对象属性(普通字段)self.__age = age  # 私有对象属性(私有普通字段)def func1(self):  # 普通方法passdef __func(self):  # 私有方法pass@propertydef prop(self):  # 属性pass@classmethod  # 类方法def class_func(cls):'''定义类方法,至少有一个cls参数'''pass@staticmethod  # 静态方法def stact_func():'''定义静态方法,无默认参数'''pass2.面向对象的私有与公有
对于每一个类的成员而言都有两种形式:
----共有成员,在任何地方都可以访问
----私有成员,只有在类的内部才能访问--------私有成员和共有成员的访问限制不同:静态字段(静态变量)
--共有静态字段:类可以访问,类内部可以访问,派生类中可以访问
--私有静态字段:仅类内部可以访问
普通字段(对象属性)
--共有普通字段:对象可以访问,类内部可以访问,派生类中可以访问
--私有普通字段:仅类内部可以访问
方法:
--共有方法:对象可以访问,类内部可以访问,派生类中可以访问
--私有方法:仅类内部可以访问总结:
对于这些私有成员来说,他们只能在类的内部使用,不能在类的外部以及派生类中使用.
ps:非要访问私有成员的话,可以通过 对象._类__属性名,但是绝对不允许!!!
为什么可以通过._类__私有成员名访问呢?因为类在创建时,
如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)
它会将其保存在内存时自动在前面加上_类名.3.面向对象的成员
1)字段
字段包括:普通字段和静态字段,他们在定义和使用中有所区别,
而最本质的区别是内存中保存的位置不同,
--普通字段属于对象
--静态字段属于类

由上图:静态字段在内存中只保存一份
普通字段在每个对象中都要保存一份
应用场景: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段
2)方法
方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
--普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
--类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
--静态方法:由类调用;无默认参数;

如上图:
相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。
不同点:方法调用者不同、调用方法时自动传入的参数不同。4.property classmethod staticmethod1)property #将一个方法,伪装成属性
class Bmi(object):def __init__(self, name, weight, highe):self.name = nameself.weight = weightself.height = highe@propertydef func(self):BMI = self.weight / (self.height ** 2)return BMIperson = Bmi('Tom', 80, 1.73)
s = person.name
ss = person.func #将方法伪装成属性
print('%s的BIM指数为%s' % (s, ss))--------------------------------------------------
class Person():def __init__(self, name, age):self.name = nameself.__age = age if type(age) is int else print('重新输入')@property     #执行查询操作自动执行此操作def age(self):return self.__age@age.setter     #执行更改操作执行此操作def age(self, temp):self.__age = temp if type(temp) is int else print('重新输入')@age.deleter    #执行del操作自动执行此方法def age(self):del self.__age2)classmethod
----类方法:通过类名调用方法,类方法中第一个参数约定俗称cls,python自动将类名传给cls
class A:def func(self):  # 普通方法print(self)@classmethoddef func0(cls):  # 类方法print(cls)a = A()
a.func()  # <__main__.A object at 0x105d8a438>
A.func0()  # <class '__main__.A'>
a1 = A()
a1.func0()  # 对象调用类方法,cls 得到的是类本身.****¥类方法应用场景
1-类中一些方法不需要对象参与
2-对类中静态变量进行改变
3-继承中,父类得到子类的类空间
例子:
class A:age = 10@classmethoddef func(cls):print(cls.age)class B(A):age = 20B.func()  # 203)staticmethod
由类名调用,无默认参数,主要作用是:能够使代码清晰,复用性强!

转载于:https://www.cnblogs.com/xiao-xue-di/p/9378033.html

Python面向对象之结构与成员相关推荐

  1. Python面向对象进阶及类成员

    再次了解多继承 先来一段代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ class A:    def bar(self):        print( ...

  2. python面向对象编程类的成员总结

    类.对象的三大成员之一字段,静态字段,动态字段 1.静态字段与普通字段的区别,静态字段属于类,普通字段属于有类生成的对象, 2.在内存中的存储方式也不一样,静态字段在内存中存储一份,普通字段每个对象存 ...

  3. python的类变量和成员变量用法_Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析...

    本文实例讲述了Python面向对象程序设计类变量与成员变量.类方法与成员方法用法.分享给大家供大家参考,具体如下: 类变量与成员变量 在类中声明的变量我们称之为类变量[静态成员变量], 在init() ...

  4. python面向对象类的成员_Python面向对象中类的成员

    Python面向对象中类的成员总共有三种,分别是字段.方法和属性 Python Version: 3.5+ 字段 普通字段1 2 3 4 5 6 7 8class A: def __init__(se ...

  5. python面向对象课程大作业 定义一个描述学生基本情况的类,数据成员至少包括 “姓名、性别、学号、年级、所在院系、面向对象的考试日期”

    python面向对象课程大作业 按下列要求编写一个完整的程序: 定义一个描述学生基本情况的类,数据成员至少包括"姓名.性别.学号.年级.所在院系.面向对象的考试日期",成员函数至少 ...

  6. Python 面向对象设计基础实战【私有成员、保护成员、公有成员、数据成员、实例化、方法】

    Reference:<Python程序设计基础(第2版)> Reference:<Python中的装饰器>https://www.jianshu.com/p/417ac7d95 ...

  7. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  8. [Python3]Python面向对象的程序设计

    [Python3]Python面向对象的程序设计 一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行 ...

  9. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

最新文章

  1. 插件制作教程 php,typecho插件编写教程(二):写一个新插件
  2. KDTable的列绑定F7控件方法
  3. 工程师如何给女友买包?问问阿里“百事通”
  4. JavaSE各阶段练习题----Map
  5. foundation 框架_来自Linux Foundation,DockerCon,Facebook,Google等的开源新闻
  6. C# Wpf异步修改UI,多线程修改UI(二)
  7. 升级EXCHANGE2010到2013(C)
  8. 使用threading+queue队列,发送get请求,输出状态码
  9. 欧几里得算法扩展欧几里得算法(基础)
  10. Tomcat中包含的配置文件、名字、作用分析记录
  11. linux df -hl 数据解释,linux磁盘空间查看命令(du,df)剩余空间查看详解
  12. [论文导读]Restoring and attributing ancient texts using deep neural networks深度学习复原古希腊铭文
  13. 考研常识-总结1(硕士、专硕;非全日制、全日制)
  14. 小储云商城v1.873源码(已更新)
  15. 全国计算机缴费时间江苏,2018年3月江苏全国计算机等级考试报名时间
  16. 1660 super安装tensorflow1.15
  17. 硅谷之行 (15) Fremont观豪宅
  18. css 优惠券样式大全
  19. TMT: A Transformer-based Modal Translator for Improving Multimodal Sequence Representations in Audio
  20. 计算机系学天体物理,中科院南京天文光学技术研究所专业介绍:天体物理

热门文章

  1. 计算机的数据库应用领域,【信息管理论文】信息管理中计算机数据库技术的应用(共4410字)...
  2. 网安入门须知:Python基础导读
  3. 神经网络技巧篇之寻找最优超参数
  4. Tablestore Timestream:为海量时序数据存储设计的全新数据模型...
  5. Windows Restart Manager 重启管理器
  6. 一个分页效果ruby版可作为面试题吧
  7. 爱情六十三课,定个开放日
  8. Python开发规范
  9. face3000 c++ 代码运行
  10. shell——脚本实现数据库备份