实例属性和类属性

类中,没有self指定的是类属性,有self指定的是实例属性。类中的方法是类属性。
类和实例都是名字空间。类是类属性的名字空间,实例时实例属性的名字空间。
可以通过类访问类属性,通过实例访问实例属性。如果实例没有同名属性的话,也可以通过实例访问类属性。
比如类C,有version属性,可以通过类访问:C.version。创建实例c后,实际上访问c.version会失败,但是,会首先在实例中搜索version,然后在类中搜索,再到继承树中的基类。

访问类属性

class C(object):version = 1.2  # 类属性
c=C()
C.version  # 通过类访问类属性
c.version # 通过实例访问类属性

类属性为不可变对象,通过实例访问类属性

C.version += 1  # 通过类更改类属性
c.version = 1 # 不能通过实例更改类属性,这样会创建一个实例属性
c.version += 1 # 为2.2,以类属性的值创建实例属性,等于c.version = C.version + 1

类属性为可变对象,通过实例访问类属性

class Foo(object):x=foo = Foo()
foo.x  # {2003:'poe2'}foo.x[2004] = 'valid path'
foo.x  # {2003:'poe2', 2004:'valid path'}Foo.x  # {2003:'poe2', 2004:'valid path'}  通过实例修改了类属性del foo.x # 失败

类属性持久化

通过实例属性类修改类属性很危险。
类属性是静态成员,类属性的修改会影响所有实例。

绑定和方法调用

方法是类内部定义的函数,方法是类属性不是实例属性。绑定主要与方法调用有关。
方法只有在类拥有实例时,才能被调用。存在一个实例时,方法才认为是绑定到哪个实例,没有实例时就是未绑定的。
方法有self参数,用于引用方法所绑定的实例。
调用绑定方法
有一个MyClass类,带self参数的foo方法,实例mc。通过实例调用方法就是调用绑定方法,mc.foo()。
调用非绑定方法
调用一个还没有任何实例的类中的方法,也就是通过类调用类方法。需要明确的传递self参数。场景:派生一个子类,并且覆盖父类的方法,需要调用父类中的方法。

class SubClass(FatherClass):def __init__(self, nm,ph):FatherClass.__init__(self,nm)self.ph = ph

静态方法和类方法

python静态方法特性之前,通过在全局名字空间创建函数替代。
通常方法需要self参数,绑定方法调用时,自动传递。对于类方法,需要的是类,通常名为cls,自动传递给类方法。

staticmethod()和classmethod()内建函数

经典类中使用静态方法和类方法

class TestStaticMethod:def foo():print 'calling static method foo()'foo = staticmethod(foo)class TestClassMethod:def foo(cls):print 'calling class method foo()'foo = classmethod(foo)tsm = TestStaticMethod()
TestStaticMethod.foo() # 通过类调用
tsm.foo()  # 通过实例调用
tcm = TestClassMethod()
TestClassMethod.foo()  #  通过类调用
tcm.foo()  #通过实例调用

使用函数修饰符

class TestStaticMethod:@staticmethoddef foo():print 'calling static method foo()'
class TestClassMethod:@classmethoddef foo(cls):print 'calling class method foo()'

组合

大的类包含其他小类的实例,类之间显著不同,小类是大的类所需要的组件。

class P:'P class'def __init__(self):print 'created an instance of ', self.__class__.__name__
class C(P):passp=P() # 父类实例
p.__class__
P.__bases__
p.__doc__c = C()
c.__class__
C.__bases__
C.__doc__  #文档字符串不能继承父类 

python基础-类相关推荐

  1. python基础类型,Python基础-类

    Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...

  2. Python基础(类与对象)

    Python基础(类与对象) 一.编程的两大思想 面向过程和面向对象 面向过程 面向对象 区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决 共同点:面向对象和面向过 ...

  3. Python基础——类与对象

    Python基础--类与对象 Python基础--类与对象 类与对象 数据类型 对象 类的创建 创建语法 类的创建 对象的创建 对象调用类中的内容 类属性,类方法,静态方法 类属性 访问类属性 类方法 ...

  4. Python基础——类属性、类方法、异常

    文章目录 一.实例属性和类属性 1.类属性 2.实例属性 3.实例方法 二.实例方法.类方法和静态方法 1.实例方法 2.类方法 3.静态方法 三.__new__方法 三.单例设计模式 四.射击游戏 ...

  5. python基础——类(面向对象的特征)

    面向对象的特征    封装   继承   多态    封装  提高程序的安全性    继承 提高代码的复用性 多态 提高程序的可扩展性和可维护性 封装:提高程序的安全性, 1.若不想外接程序进行访问里 ...

  6. 8.0、Python基础---类(浅读)(下)

    目录 8.5.导入类 8.5.1.导入单个类 8.5.2.在一个模块中存储多个类 8.5.3.导入模块中的所有类 8.5.4.在一个模块中导入另一个模块 8.5.导入类 随着你不断地给类添加功能,文件 ...

  7. python基础-类的继承

    继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 格式:class 子类(父类): 子类可以继承或重写父类的方法 子类可以自定义 ...

  8. Python基础——类(Class)

    文章目录 1.class基本概念 2.init 功能 1.class基本概念 class 定义一个类, 后面的类别首字母推荐以大写的形式定义,比如Calculator. class可以先定义自己的属性 ...

  9. python基础------类与对象之间的关系,封装、继承、多态

    类与对象.封装.继承 练习1 # 1.写一个员工类BwEmployee class BwEmployee(object): # (2)添加构造方法,包含5个形参,保存外部传入值,分别给以下实例属性赋值 ...

最新文章

  1. 用户表如何存放用户密码
  2. 开启redis远程客户端连接
  3. SAP FSM 学习笔记(三) 在微信里发起SAP FSM客户预约
  4. 计算机二级考试需要怎么备考,计算机二级ms office应该怎么备考 考试内容是什么...
  5. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
  6. 将实例的生成交给子类——工厂方法模式
  7. 身份证号码(最后一位)计算。(使用 Excel 公式,计算 身份证最后一位)
  8. 一篇让你看懂卷积神经网络
  9. 流媒体服务器架设(转载)
  10. 用递归求字符串的全组合
  11. vscode 字体颜色变得花里胡哨的
  12. 随机数C语言 (就做个笔记储存一下)
  13. android简单计时器源码,Android计时器的三种实现方式(Chronometer、Timer、handler)...
  14. 电脑锁屏挂机锁绿色版简单实用工具
  15. Java知识点笔记(一):how2j.cn的学习(一)
  16. 为什么NoSQL数据库这么受欢迎?
  17. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解
  18. 基于Java毕业设计宠物店管理系统源码+系统+mysql+lw文档+部署软件
  19. Android 安卓动画 属性动画 - 渐变/透明度 动画
  20. Typec转HDMI+PD3.0+U3+U2+SD/TF读卡拓展七合一方案设计电路|CS5266+MA8621设计参考电路

热门文章

  1. 【原创】最值得推荐wince应用和wince驱动入门书籍
  2. 队列的链式存储结构及其实现_了解队列数据结构及其实现
  3. 数据分析中的统计概率_了解统计和概率:成为专家数据科学家
  4. 编写程序乘法口诀表C语言,陈广川问:c语言编程九九乘法口诀表 怎样用c语言写九九乘法口诀表?...
  5. xgboost keras_用catboost lgbm xgboost和keras预测财务交易
  6. LCP 07. 传递信息
  7. 配置 aws cli_AWS CLI教程–如何安装,配置和使用AWS CLI了解您的资源环境
  8. css左右布局代码_如何使用CSS位置来布局网站(带有示例代码)
  9. vj节点_创意编码—如何在JavaScript中创建VJ引擎
  10. 数据科学与大数据技术的案例_作为数据科学家解决问题的案例研究