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

由上图:

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

如上图:
相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。
不同点:方法调用者不同、调用方法时自动传入的参数不同。 4.property classmethod staticmethod 1)property #将一个方法,伪装成属性
class Bmi(object):
def __init__(self, name, weight, highe):
self.name = name
self.weight = weight
self.height = highe @property
def func(self):
BMI = self.weight / (self.height ** 2)
return BMI person = 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 = name
self.__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.__age 2)classmethod
----类方法:通过类名调用方法,类方法中第一个参数约定俗称cls,python自动将类名传给cls
class A:
def func(self): # 普通方法
print(self) @classmethod
def 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 @classmethod
def func(cls):
print(cls.age) class B(A):
age = 20 B.func() # 20 3)staticmethod
由类名调用,无默认参数,主要作用是:能够使代码清晰,复用性强!

Python面向对象之结构与成员的更多相关文章

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

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

  2. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  3. python面向对象与结构成员之间的关系

    1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...

  4. python 面向对象(类的成员,属性,绑定和非绑定,)

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

  5. Python 面向对象(下)

    本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 Python面向对象--继承,实现,依赖,关联,聚合,组合 五. 特殊成员 Python面向对象--类的特殊成员 ...

  6. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  7. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  8. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  9. Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象

    Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...

随机推荐

  1. python读写txt大文件

    直接上代码: import easygui import os path = easygui.fileopenbox()#path是打开的文件的全路径 if path:#如果选择打开文件,没有选择取消 ...

  2. matlab给图片插入说明文字

    text(cluster().center(),cluster().center(),num2str(),'color','k') 格式是text(x,y,'说明文字') x,y代表位置

  3. sqlite:多线程操作数据库“database is locked”解决方法

    1. 使sqlite支持多线程(不确定是否非加不可,暂且加上,以备后患) 可以在编译时/启动时/运行时选择线程模式,参考:http://www.cnblogs.com/liaj/p/4015219.h ...

  4. POJ 2503 Babelfish(map,字典树,快排+二分,hash)

    题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...

  5. 微软面试题:鸡蛋从第N层及以上的楼层落下会摔破

    from:https://blog.csdn.net/qq_18425655/article/details/52326709   题目: 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破 ...

  6. COM对象创建过程

    在客户端需要调用COM组件时,通常调用windowAPI函数: STDAPI CoCreateInstance( REFCLSID rclsid, //创建的Com对象的类标识符(CLSID) LPU ...

  7. Mac环境下安装node.js、npm、express

    一:node.js安转 方法一:下载node.js for Mac 地址: http://nodejs.org/download/ 直接下载 pkg的,双击安装,一路点next,很容易就搞定了. 安装 ...

  8. BZOJ_5338_ [TJOI2018]xor_可持久化trie

    BZOJ_5338_ [TJOI2018]xor_可持久化trie Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 ...

  9. 打印菱形(Print Diamond/Lozenge)

      → ↓     *       * * *   * * * * *   * * *       *     总结了一下关于打印菱形的思路. 通常是从循环变量之间的映射关系入手,推导出相应的公式.这 ...

  10. GET和POST的区别及get和post关于请求的编解码的问题

    GET和POST的本质区别是什么?        使用GET,form中的数据将编码到url中,而使用POST的form中的数据则在http协议的header中传输.在使用上,当且仅当请求幂等(字面意 ...