python基础-类

实例属性和类属性

类中,没有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__  #文档字符串不能继承父类 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exynos4412 内核移植(五)—— 驱动的移植

以移植自己制作的驱动,学习内核移植中的驱动移植,及 驱动程序的动态编译和静态编译 硬件环境: Linux 内核版本:Linux 3.14 主机:Ubuntu 12.04发行版 目标机:FS4412平台 交叉编译工具:arm-none-l…

FTP文件共传输服务

FTP文件共传输服务一,vsftpd服务基础(1),FTP服务概述FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件共同实现文件传达输功能…

python基础-super

Super返回的是mro列表中的下一个类 python的super详解(二) 文档解释顺序MRO用于在祖先类中查找属性。每个定义的类,都有一个名为__mro__的属性,他是一个元组。 super(type[, ojb]) 给出type,super()返回type的父类。如果希望父类被绑定&#…

Exynos4412 内核移植(四)—— MMU 相关知识解析

一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当…

Mysql limit 子查询

为什么80%的码农都做不了架构师?>>> (1)mysql limit 不支持子查询像下面这条语句无法执行 SELECT * FROM b_c_s1 where CT_ID IN (SELECT DISTINCT CT_ID FROM b_c_s1 LIMIT 0,2); (2)应该在只查询外面再…

python描述符

Python中的描述符 Python基本语法之描述符 Python 为什么要使用描述符?

Exynos4412 内核移植(二)—— 内核编译过程分析

内核的编译同样是从Makefile 来分析: 一、内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: arch:体系结构相关代码…

深入理解Java:注解(Annotation)

2019独角兽企业重金招聘Python工程师标准>>> 一、概述 1.什么是注解(Annotation) Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Ann…

python基础-userlist、userdict、userstring

Python教程–UserDict、UserList 、UserString对象用法 UserDict

Exynos4412 内核移植(三)—— 内核启动过程分析

内核启动所用函数如下: 与移植U-Boot 的过程相似,在移植Linux 之前,先了解它的启动过程。Linux 的过程可以分为两部分:架构/开发板相关的引导过程、后续的通用启动过程。对于uImage、zImage ,它们首先进行自解压得到vmlinux &…

python基础-C扩展

写python的c扩展简介 使用C/C编写Python模块扩展 Python - 用C扩展编程 使用 C 或 C 扩展 Python 原因 添加额外的非python功能。性能瓶颈的效率提升专有源代码保密 写扩展库的代码 Extest.c文件包含包含要扩展的C模块,包含fac()和reverse()函数。 并调试完bug。…

开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt...

首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 。 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Active Accessibility, UIAutomation 用脚本语言AutoIT实现自动化就是第一种技术Windows API, 查找窗…

Exynos4412 Uboot 移植(六)—— 相关知识补充

Uboot版本:u-boot-2013.01 一、gd结构体的定义与使用 gd_t 和 bd_t 是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。 gd_t 定义在/u-boot-2013.01/arch/arm/include/asm/global_data.h bd_t 定义在 ./include/asm-ar…

eclipse4.3.1标准版安装freemarker插件

一直用的是Myeclipse,它的好处就是所有的插件都是给你准备好了,不用费心去整太多,我有点喜欢倒腾,就是想用用eclipse. 今天去eclipse官网下载了一个eclipse,我现在下载的版本是4.3.1的,软件更新总是很快 这…

Exynos4412 Uboot 移植(五)—— Uboot 移植过程

Uboot 版本:u-boot-2013.01 开发板:FS_4412 平台(Exynos4412,可以根据自己的板子修改,只要是4412的过程都是一样的) 一、建立自己的平台 1、下载源码 我们可以在下面这个网站上下载最新的和以前任一版本的uboot ftp://…

编程练习

尽可能使字符串相等 给你两个长度相同的字符串,s 和 t。 将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。 用于变更字符串的最大预算是 maxCo…

apply()和call()的区别

之前做过这样的一道题就是问apply()与call()的区别。当时没能答出来,现在整理一下,希望以后有帮助。其实每个函数都包含两个非继承而来的方法:apply()和call(…

Nagios 安装及常见错误

一、实验环境监控服务器(nagios服务器--192.168.1.100)CentOS5.4 nagios-3.2.1 nagios-plugins-1.4.14 nrpe-2.12被监控客户端(linux客户端--192.168.1.200)CentOS5.4 nagios-plugins-1.4.14 nrpe-2.12二、nrpe插件1、nrpe插…

Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析

bootloader 要想启动内核,可以直接跳到内核的第一个指令处,即内核的起始地址,这样便可以完成内核的启动工作了。但是要想启动内核还需要满足一些条件,如下所示: 1、cpu 寄存器设置 * R0 0 * R1 机器类型 id …

Python QT5

Python QT5 简洁入门 Python3 搭建Qt5 环境 Python 使用QT5开发界面的一个demo开发过程的总结 Python GUI教程 PyQt5 Reference Guide