Python 基础学习-类变量与对象变量
来源:互联网 发布:打开pdg文件的软件 编辑:程序博客网 时间:2024/06/01 07:31
发现学习不记笔记危害很大的,一是容易忘记而且不易找回,二是很难发现之前学习中的不足或者错误。所以以后Python的学习,要做好笔记,供以后改正。
与Java的区别
Python中的变量与Java中的变量有很多相同的地方,比如:
- 私有属性与公有属性
- 作用域
但是它们之间使用的差异也很明显,除了Java中的变量有严格的类型检查之外,我觉得最大的不同是:Java不是一种动态语言,Java中类的变量需提前在在类中定义,不能动态增加。而Python中的类变量与对象变量可以动态调整。
程序测试
class_method.py
#!/usr/bin/env python #coding:utf-8 import traceback from print_dir import print_all class Cls(object): inst_no = 0 #实例数量 def __init__(self): self.inst_no = Cls.inst_no + 10 #定义对象变量 Cls.inst_no += 1 #实例数量+1 def get_no_of_instances(cls_obj): """获取实例数量""" return cls_obj.inst_no def set_new_attr_to_obj(cls_obj): """为对象添加新属性""" cls_obj.new_oattr1 = 'new_oattr1_value' cls_obj.new_oattr2 = 2 def set_new_attr_to_class(cls): """为类添加新属性""" cls.new_cattr1 = 'new_cvalue' cls.new_cattr2 = 7 print "创建实例对象obj1, obj2" obj1 = Cls() obj2 = Cls() print print "通过get_no_of_instances方法获取相应的(类或者对象实例)inst_no值" print "get_no_of_instances(Cls) = %d " % get_no_of_instances(Cls) print "get_no_of_instances(obj1) = %d " %get_no_of_instances(obj1) print "get_no_of_instances(obj2) = %d " %get_no_of_instances(obj2) print print "查看Cls.inst_no" print "Cls.inst_no = %d" % Cls.inst_no print print "为对象obj1添加新属性并验证" set_new_attr_to_obj(obj1) print "obj1.new_oattr1 = %s" % obj1.new_oattr1 print "obj1.new_oattr2 = %d" % obj1.new_oattr2 print print "查看对象obj2是否具有obj1新属性" try: print obj2.new_oattr1 except AttributeError, e: print e #traceback.print_exc() print print "查看所有对象与类的属性" print_all(Cls, obj1, obj2) print "为类Cls添加新属性并验证" set_new_attr_to_class(Cls) print_all(Cls, obj1, obj2) print"在主文件中查看dir()" print dir() print
print_dir.py
#!/usr/bin/env python#coding:utf-8def print_all(Cls, obj1, obj2): print "dir(Cls)" print dir(Cls) print print "dir(obj1)" print dir(obj1) print print "dir(obj2)" print dir(obj2) print
下面是运行结果
发现类的变量不仅可以通过class_name.var_name这种方式访问,还可以直接通过类的对象直接访问obj_name.var_name.
注释掉class_method.py 中_init_方法中的self.inst_no = Cls.inst_no + 10
class_method.py
#!/usr/bin/env python#coding:utf-8import tracebackfrom print_dir import print_allclass Cls(object): inst_no = 0 #实例数量 def __init__(self): #self.inst_no = Cls.inst_no + 10 #定义对象变量 Cls.inst_no += 1 #实例数量+1......(其他内容不变)
执行结果
看得出Python中的变量定义非常灵活,可以随时动态添加
0 0
- Python 基础学习-类变量与对象变量
- 【学习笔记】Python基础-数据类型与变量
- python使用类与对象的变量
- 零基础学python-6.1 变量、对象与引用
- Python基础:Python的变量和对象
- Python基础:Python的变量和对象
- Python基础:Python的变量和对象
- python基础:类、私有变量、类变量
- Python基础-类变量和实例变量
- java基础入门-对象与对象变量
- 【Python】类和对象变量
- Python类变量与成员变量
- OC基础----类与对象、实例变量的可见度、继承
- python学习中对类和对象中变量理解
- Python:类与对象的变量[SimpleClass.py]
- Python探险--变量与可变对象
- Python 私有变量、私有方法、类变量与实例变量
- python基础学习一 数据类型和变量
- 读书笔记之linux/unix系统编程手册(20)
- 黑马程序员--Java基础学习(网络编程)第二十三天
- Android - 文件读写操作 总结
- apache mina串口程序
- jQuery学习笔记(四)
- Python 基础学习-类变量与对象变量
- Maven编译项目报错:某些类找不到符号
- hdu 2063 过山车
- C++类中的const和static
- php基础
- poj 2349 Arctic Network
- 黑马程序员----Java多线程
- Dispose()与close()的关系--源码解析
- xampp安装完成后mysql无法启动