python中类的属性(class attribute)的解释

Python中的属性(Attribute)问题 通过使用dir()、hasattr()、getattr()、setattr()和delattr()等内置函数,我们可以更好地管理Python对象的属性。在Python中,属性是指任何Python对象可以访问的值或函数。在Python中,使用内置函数getattr()可以获取对象的某个属性的值。在Python中,使用内置函数setattr()可以设置对象的某个属性的值。在Python中,使用内置函数delattr()可以删除对象的某个属性。在Python中,使用内置函数dir()可以获取对象的所有属性列表。 阅读详情
着实被"dive into python"和"python简明教程"中对类的属性的介绍弄晕了,在经过了若干小时痛苦的想象和实践后,终于略有小成,写文一篇,帮助大家解惑.
我的环境是python2.5

知识准备

可以看这个连接先:
http://www.python.org/doc/curren ... 1600000000000000000

python中的类叫 class object,类的实例叫instance object.

类 Class Objects

类拥有两种操作,1.类属性 attribute references 2.实例化instantiation

类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量static public),使用方法是:类名称.类属性名称

实例化则是创建一个类的实例的方法,使用方法是:类名称()
在使用实例化方法后,将会创建一个空的类实例,一般的python类的定义中会有一个特殊的方法来初始化,这个方法就是__init__(), 当调用了类的实例化方法后,__init__()方法会立刻被这个类的实例调用.也就是说,__init__()不是构造函数,而是一个普通的方法.

类的实例 Instance Objects


类的实例只拥有一种操作,这就是 1.属性调用 attribute references.

属性调用指 1.数据属性 2.方法

数据属性

数据属性不需要预先定义!当数据属性初次被使用时,它即被创建并赋值(they spring into existence when they are first assigned to)
看下面的例子
class Test:
    pass

t=Test()
t.name='notus'
print t.name 
我们在类Test中并没有定义name这个数据属性,但是在代码中却可以直接使用,这就是数据属性.

方法
这个暂且不议.

如何定义类的属性

现在,抛开广义上对属性attribute的解释,在实际编程中经常用的属性这个词,在python的class中有两种属性:类属性,数据属性.(大多数编程语言都有这样两种属性).类属性属于类,数据属性属于类的实例.我们假设有类Test,则一般这两种属性的用法是
Test.mode
t=Test()
t.name
那么这两种属性应该在什么时候定义呢?
按照上面的讨论可知,数据属性不需要预先定义,当数据属性初次被使用时,它即被创建并赋值.而实际上,类属性也是如此.

因此,我们有了下面的例子

class Test:
    pass

t=Test()
t.name='notus'
print t.name
Test.mode='auto'
print Test.mode

大家看,数据属性name和类属性mode均没有在类中被定义,你要做的,只是在需要的时候使用他们即可.

如何预先给属性赋值

可以在类的定义中使用属性,先看这个例子
class Test:
    def ask(theInstance):
        theInstance.name='notus'
        Test.mode='auto'

##print Test.mode
t=Test()
##print t.name
t.ask()
print Test.mode
print t.name
类Test有方法ask.注意看程序中被注释掉的两行,在没有使用ask()方法前,运行被注释的那两句的任一句均会出错,提示"class Test has no attribute ...".但运行ask()后, 我们在ask()方法中初始了这两个属性,则运行通过.
注意看ask()接收的参数theInstance,这个传过来的就是程序中类Test的实例t.一般的命名规范建议将这个参数命名为self.这个参数是python自动传入的,所以不需要再在程序中传.
如果想要在类实例化后立刻使用这些属性,那就应该把这些属性的初始放在__init__()方法中,前面说过了,__init__()方法在类的实例化结束后立刻被自动调用.所以我们的例子程序可以改成这样
class Test:
    def __init__(self):
        self.name='notus'
        Test.mode='auto'

##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name
所以可以有这样的类定义
class Test:
    def __init__(self):
        self.name='notus'
        Test.mode='auto'
    def ask(self):
        self.date='2008'

##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name
##print t.date
t.ask()
print t.date
数据属性date只有在调用了ask()方法后才可以被使用.当然这样也可以使用这个属性
##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name
t.date='2007'
print t.date
在程序中创建了date这个数据属性.可以想象,之后调用ask()方法时,数据属性date已经存在,只是被改变了值.

不用方法也可以初始化属性

看下面的示例程序
class Test:
    action='win the game'

print Test.action
t=Test()
print t.action
Test.action='at least 1 point'
print Test.action
print t.action
t.action='dont lose'
print Test.action
print t.action
运行的结果如下

win the game
win the game
at least 1 point
at least 1 point
at least 1 point
dont lose

现象可以概括为:"改变类属性,数据属性跟着变,改变数据属性,类属性不变".其中的原理,因为不明白,所以不乱说了.高人来解释下 :)

希望本文可以给迷糊的朋友以帮助.
史上最小白之RNN详解 1.前言 网上目前已经有诸多优秀的RNN相关博客,但是我写博客的出发点主要是为了加深和巩固自己的理解,所以还是决定自己再进行一下总结和描述,如有不正确的地方欢迎指正~ 2.区分RNN 循环神经网络(Recurrent Neural Network),递归神经网络(Recursive Neural Network),你有没有发现他们的缩写都是RNN,那他们两个是同一回事儿吗?网上有一些博客把这两就当... 阅读详情

相关推荐

高杂合度基因组组装实战:Hifiasm参数调优与purge_dups过滤效果对比(附猪毛菜案例)

本文深入探讨了高杂合度基因组组装中Hifiasm参数调优与purge_dups过滤的实战效果对比,通过猪毛菜案例详细解析了两种方法的适用场景与优化策略。文章重点分析了purge_dups在contig过滤中的显著效果,为基因组组装提供了关键的技术参考。

weixin_29232121的博客 495

python中类的属性(class attribute&data attribute)的解释

python中类的属性(class attribute&data attribute)的解释 2008-01-09 15:56 着实被"dive into python"和"python简明教程"中对类的属性的介绍弄晕了,在经过了若干小时痛苦的想象和实践后,终于略有小成,写文一篇,帮助大家解惑. 我的环境是python2.5 知识准备 可以看这个连接先: http://www....

cai555的专栏 1343

电子纸价签实战:基于SSD1680的墨水屏驱动开发与优化

本文详细介绍了基于SSD1680驱动芯片的电子纸价签开发实战,涵盖硬件连接、驱动框架搭建、核心流程解析及性能优化。重点剖析了初始化配置、波形文件加载、图像数据写入与刷新触发等关键步骤,并提供了功耗优化、显示效果提升及代码健壮性等实用避坑指南,帮助开发者高效实现稳定低功耗的墨水屏驱动。

weixin_28278377的博客 231

python:python对象属性及属性函数property()

http://blog.youkuaiyun.com/pipisorry/article/details/50708616python对象属性Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。属性的__dict__系统对象的属性可能来自于其类定义,叫做类属性(class attribute)。类属性可能来自类定义自身,也可能根据类定

皮皮blog 7285

JFET放大电路实例设计仿真

参照《晶体管电路设计》中的例子 JFET 2SK184 JFET 2SK184 数据手册如下 电路设计 共源放大 步骤:1、静态工作点 2N4416 1ma 2、RD和RS A=5 5:1 RS 2V /1m=2k RD 5k 3、偏压VG 根据传输特性 VGS-ID vgs=-0.7 vg=2-0.7=1.3 400k^2/50k...

f的博客 7441

AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

通过精密的事件监听、状态管理和对系统动画 API 及 Launcher 内部组件的协调,实现了复杂而流畅的手势导航体验。它的抽象设计允许子类(如。是 Quickstep (Launcher3 的手势导航实现) 中处理。的核心逻辑抽象基类。这个非常核心且复杂的类。)定制特定的回家动画逻辑。好的,我们来深入分析。

Micheal_Yang's Blog 1520

【Python单点知识】类成员汇总讲解——包含类方法、静态方法、私有成员说明

Python类成员汇总

使者大牙ℂypher的博客 2239

【WRF安装】WRF编译错误:problems building executables look for error in the build log

WRF编译错误:problems building executables look for error in the build log

WW、forever的博客 753

Python入门之路(12)

Python入门之路(12) 类 类的特殊方法 以下为例1. name属性是必须的,2. name属性值是不同的,3.添加name的方式容易报错。 希望在创建对象时,必须设置name属性,如果不设置对象都无法创建。 class Person: # name = '葫芦娃' #属性最好在实例对象中定义 def speak(self): print('大家好,我是%s'%self.name) p1 = Person() # 手动想对象中添加name属性 p1.n

qq_31660917的博客 362

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.3 从零移植 busybox,基于RISC-V

上一章节我们已经成功启动了`Ubuntu`,但是由于`Ubuntu`占用系统空间过大,所以我转向占用较小的`busybox`,预计就占用`30M`左右。开始移植busybox,基于riscv64

DSMGUOGUO的博客 857

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 300

python中的类的属性是什么_python中类的属性(class attribute)的解释

原博文2014-03-18 15:12 −python中的类叫 class object,类的实例叫instance object.类 Class Objects类拥有两种操作,1.类属性 attribute references 2.实例化instantiation类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量stati...02926相关推荐2017-04-22 21:36 ...

weixin_39613208的博客 447

基于STM32的智能血氧、心率、体温、血压监测系统

摘要:本文设计了一款基于STM32F103C8T6的多功能健康监测系统,可实时检测血氧、心率、体温和血压四项生理参数。系统集成MAX30102、DS18B20等传感器模块,采用OLED显示和蓝牙无线传输技术,实现一键血压测量、阈值报警及手机APP数据管理功能。硬件设计包含传感器采集、电源管理、显示报警等模块;软件采用模块化架构,实现数据采集处理、蓝牙通讯等功能。测试表明系统测量准确可靠,为家庭健康监测提供了便携解决方案。未来可扩展更多监测参数和智能分析功能。

3254968421的博客 771

python的类是什么_python中类的属性(class attribute)的解释

着实被"dive intopython"和"python简明教程"中对类的属性的介绍弄晕了,在经过了若干小时痛苦的想象和实践后,终于略有小成,写文一篇,帮助大家解惑.我的环境是python2.5知识准备可以看这个连接先:http://www.python.org/doc/curren ...1600000000000000000python中的类叫 class object,类的实例叫instan...

weixin_39588084的博客 165

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python的类里的属性是否可以为列表_python中类的属性(class attribute)的解释

python中的类叫 class object,类的实例叫instance object.类 Class Objects类拥有两种操作,1.类属性 attribute references 2.实例化instantiation类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量static public),使用方法是:类名称.类属性名称实例化则是创建一个类的实例的方法,使用方法是:类名...

weixin_39594312的博客 560

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python类的一个实例属性,类属性

python中的类有属性这一概念,而类似于C++中的静态属性/方法和成员属性/方法,python中有类属性和实例属性这一需要区分的概念。

qq_53704489的博客 179

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Python】解决Python报错:AttributeError: ‘class‘ object has no attribute ‘xxx‘

解决Python报错:AttributeError: ‘class‘ object has no attribute ‘xxx‘

科技改变人类,技术成就未来 2083

python中类属性和数据属性的解释

python中的类叫class object,类的实例叫instance object.  类 Class Objects  类拥有两种操作,1.类属性 attribute references 2.实例化instantiation  类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量static public),使用方法是:类名称.类属性名称 实例化则是创建一个类的实例的

爱生活爱AC 5651

Python中class类的属性和方法讲解

静态方法: 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法。普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量。静态方法是不可以访问实例变量或类变量的,它与类唯一的关联就是需要通过类名来调用这个方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

qq_39581763的博客 670

【转】python中的OOP:class attribute 和 instance attribute

参考自: Instance attribute attribute_name defined outside init How to avoid having class data shared among instances? 文章目录explanation总结 explanation class A: temp='Skyharbor' def __init__(self, x): s...

twt9628的博客 2376

深入觅阅MiuRead架构:E-Ink与Web双通道API设计全解析

觅阅 MiuRead 是一款运行在 Kindle 上的 KOReader 微信读书(WeRead)插件,支持书架管理、章节下载、划线与想法同步以及阅读时长统计。它最有趣的部分藏在网络层:同一套业务 API 背后,同时接入了 **E-Ink 原生通道** 和 **Web 浏览器通道** 两套完全不同的微信读书接口,并通过统一的路由策略自动选择、失败回退。本文带你从零理解这套双通道 API 的架构设计

gitblog_00978的博客 1119

Python--动态为类增加属性的几种方式总结

前言: Python是一门动态强类型语言,想要实现为类增添属性有好几种方式,本篇博客就此做一个简单的总结。 在总结之前,让我们先来看看python的反射 反射概述: 运行时,区别于编译时,指的是程序被加载到内存中执行的时候。 反射,reflection,指的是运行时获取类型定义信息。 一个对象能够在运行时,像照镜子一样,反射出其类型信息。 简单说,在Python中,能够通过一个对象,找出其t...

FatTigerx的博客 3302

编程语言中的Class、Object、Property、attribute、field、Method、Event 【修订】

编程中的基本概念学习笔记 编程语言中的类(Class)对象(Object)属性(Property)事件(Event)方法(Method) "对象"(Object)就像我们在日常生活中所看到的各种物体,例如汽车、手机等等,而对象可能又是由许多对象组成,例如汽车是一种对象,而汽车又由发动机、车体、车轮等构成。在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods)。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例

cnds123的专栏 4492

【Python】成功解决AttributeError: ‘MyClass’ object has no attribute ‘my_attribute’

你可能忘记了在类中定义该属性,或者错误地认为该属性已经被定义。如果属性是在类的方法内部定义的,并且该方法没有被调用,或者属性是局部变量而不是实例变量,那么该属性就不会成为实例的属性。确保在类中定义了。你可以在__init__方法中定义它,或者在类的其他方法中定义它(如果它是一个需要计算或根据条件设置的属性)。

qq_38614074的博客 2016

class类的定义(一) python

我们会把同类的函数,变量打包到一个包里面,这个包就是类。他其实可以比作是某种”集合或种类“的描述,他以class开始,后面跟着类名。类是以具体的东西为模板,譬如人类,动物类,家具等,他里面的函数是对这个类进行操作,如人类说话,动物捕猎,家具损坏等。 类只是一个语句,他不像模块是一个文件。 因为类拥有属性(成员变量)和功能(成员函数),属性即类本身的一些特性,如人类有名字、身高和体重等属

Lydia5945的专栏 2750
上一篇: python中的reduce函数
下一篇: twisted编写简单的web代理服务器
chjjunking
博客等级 码龄17年 103粉丝 102原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值