1  实例属性和类属性

类和实例都是名字空间,类是类属性的名字空间,实例则是实例属性的名字空间。

类属性可通过类或实例来访问。只有通过类名访问时,才能修改类属性的值。

例外的一种情况是,当类属性是一个可变对象时(比如一个字典),这时,通过它的实例是可以修改类的这个可变属性的。

当类属性被修改时,会影响到所有的实例,包括修改之前和之后创建的实例。

2  绑定和方法调用

方法是类属性而不是实例属性。

方法只有当类拥有实例时,才能被调用。

任何一个方法定义中的第一个参数都是变量self,它表示调用此方法的实例对象。

3 静态方法和类方法

类方法和通常的方法不同的是,它需要类而不是实例作为第一个参数传递给它,通常使用cls作为传递的变量名。

使用函数修饰符对上面的代码进行重写:

class TestStaticMethod:
@staticmethod
def foo():
print 'calling static method foo()' class TestClassMethod:
@classmethod
def foo(cls):
print 'calling class method foo()'
print 'foo() is part of class:', cls.__name__

4 组合

一个类中包含其他类的实例,反应的是“has-a / 有一个”的关系。

5 子类和派生

需要注意的是,文档字符串对类,函数/方法,模块来说,都是唯一的,所以特殊属性__doc__不会从基类中继承过来。

__bases__类属性:对于任何子类,它是一个包含其父类的集合的元组。(直接继承的父类,不包括传递继承关系的父类)

覆盖父类方法后,想要在子类中调用父类中被覆盖的方法,可以通过如下的方式:

# 1
Parent.foo(c) # c is an instance of Child # 2
class Child(P):
def foo(self):
P.foo(self)
pirnt 'Hi, I an Child-foo()' # 3 super()内建方法, super()找到基类方法,并且传递self参数。
class Child(Parent):
def foo(self):
super(Child, self).foo()
print 'Hi, I am C-foo()'

注意:在子类中重写__init__不会自动调用基类的__init__,这点和Java有很大的区别。

python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法的更多相关文章

  1. python面向对象学习(六)类属性、类方法、静态方法

    目录 1. 类的结构 1.1 术语 -- 实例 1.2 类是一个特殊的对象 2. 类属性和实例属性 2.1 概念和使用 2.2 属性的获取机制 3. 类方法和静态方法 3.1 类方法 3.2 静态方法 ...

  2. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  3. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  4. 【17】有关python面向对象编程的提高【多继承、多态、类属性、动态添加与限制添加属性与方法、@property】

    一.多继承 案例1:小孩继承自爸爸,妈妈.在程序入口模块再创建实例调用执行 #father模块 class Father(object): def __init__(self,money): self ...

  5. python从入门到大神---1、初始化实例、类属性、方法

    python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...

  6. Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html Python 类 类定义语法 最简单的类定义看起来像这样 class ClassName: ...

  7. Python基础:17类和实例之一(类属性和实例属性)

    1:类通常在一个模块的顶层进行定义.对于Python来说,声明与定义类是同时进行的. 2:类属性仅与其类相绑定,类数据属性仅当需要有更加“静态”数据类型时才变得有用,这种属性是静态变量.它们表示这些数 ...

  8. Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())

    Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分    ...

  9. python面向对象编程(上)

    面向对象编程(OOP,Object Oriented Programming)是每一个高级编程语言都支持的编程方法,比如JAVA/C++/C#等等.学习面向对象编程是每一个程序员都绕不开的重点内容. ...

  10. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

随机推荐

  1. sqlplus 调试存储过程

    SQLPLUS里测试带返回参数的存储过程过程名p_test入参 aa varchar2出参 bb sys_refcursor 在SQLPLUS里如何将sys_refcursor 这个结果集获取出来呢 ...

  2. php 截取中文字符串方法

    /** * 截取中文字符串函数 * @param $str 需要截取的字串 * @param $start 开始截取的位置 * @param $length 截取的长度 * @return 此函数返回 ...

  3. springmvc fileupload

    1.pom文件中fileupload的dependencyyinr <dependency> <groupId>commons-fileupload</groupId&g ...

  4. js导航下拉菜单

    使用定时器.鼠标移动事件 var img = $('#user_head'); var menu = $('.nav_list'); var i=0; var timer; img.mouseente ...

  5. 后台UI模板开发规范

    AdminLTE模板 在接触新模板之前,需要对bootstrap有初步了解,文档戳这里  主要是了解有哪些控件.样式.元素 可以直接follow使用(形成需要什么的时候直接去查文档的意识,而不是都自己 ...

  6. veloctiy入门

    什么是velocity? velocity是一个基于Java的模板引擎.你可以使用它来预定义模板,并且对模板进行数据渲染,从而动态生成相应的文本.它如同JSP一样经常被使用在MVC分层架构当中,充当V ...

  7. java常见异常(转载)

    版权声明: https://blog.csdn.net/qq_32595075/article/details/80059834 一般面试中java Exception(runtimeExceptio ...

  8. 使用webClient实现图片同步,异步下载

    WebClient.DownloadFile 方法 将具有指定 URI 的资源下载到本地文件. 命名空间:System.Net 程序集:System(在 system.dll 中) 同步实现参考代码: ...

  9. 最大子序列和问题--时间复杂度O(NlogN)

    最大子序列和问题--时间复杂度O(NlogN) package a; /* * 最大子序列和问题,时间复杂度O(NlogN) */ public class Sequence { private st ...

  10. zoj 1037 最短路

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=37 找规律,水题 #include<iostream> #inclu ...