类的命令空间

1. 类可以定义两种属性:

1> 静态属性:直接在类中定义的变量,是共享给所有实例对象的;

2> 动态属性:定义在类中的方法,是绑定到所有实例对象的;

3> 创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性;

4> 对象/实例访问对象时,先找自己的,没有再找类的,之后再找父类的,再没有就抛错;

class Course:
    language = [‘Chinese‘]
    def __init__(self,teacher,course,period,price):
        self.teacher = teacher
        self.name = course
        self.period = period
        self.price = price

    def func(self):
        pass

python=Course(‘egon‘,‘python‘,‘6 months‘,2000)
linux=Course(‘amy‘,‘linux‘,‘9 months‘,4000)

python.language = ‘English‘  #python实例自己增加了一个属性language

print(‘Course.language的id:‘,id(Course.language))
print(‘python.language的id:‘,id(python.language)) #新地址
print(‘linux.language的id:‘,id(linux.language))
print(‘--------------------‘)
print(‘Course.language:‘,Course.language)
print(‘python.language:‘,python.language)
print(‘linux.language:‘,linux.language)    #linux自己没有属性language,引用了类的静态属性
print(‘++++++++++++++++++++‘)
print(‘Course.__dict__:‘,Course.__dict__)
print(‘python.__dict__:‘,python.__dict__)
print(‘linux.__dict__:‘,linux.__dict__)

类静态属性

2. 对于不可变数据类型,类变量最好用类操作,而不使用实例操作;

3. 对于可变数据类型,实例名的修改是共享的(同一个命令空间),重新赋值是独立的(新的命令空间);

class Course:
    language = [‘Chinese‘]
    def __init__(self,teacher,course,period,price):
        self.teacher = teacher
        self.name = course
        self.period = period
        self.price = price

    def func(self):
        pass

python=Course(‘egon‘,‘python‘,‘6 months‘,2000)
linux=Course(‘amy‘,‘linux‘,‘9 months‘,4000)

python.language[0] = ‘English‘    #直接修改了Course.language对象所指的列表对象[‘Chinese‘]的值修改为English

print(‘Course.language的id:‘,id(Course.language))
print(‘python.language的id:‘,id(python.language))   #引用的是Course.language对象所指的列表的值
print(‘linux.language的id:‘,id(linux.language))     #引用的是Course.language对象所指的列表的值
print(‘python.language[0]的id:‘,id(python.language[0])) #列表对象[‘Chinese‘]的id
print(‘--------------------‘)
print(‘Course.language:‘,Course.language)
print(‘python.language:‘,python.language)
print(‘linux.language:‘,linux.language)
print(‘++++++++++++++++++++‘)
print(‘Course.__dict__:‘,Course.__dict__)
print(‘python.__dict__:‘,python.__dict__)
print(‘linux.__dict__:‘,linux.__dict__)

类属性修改

4. 一个应用

#创建一个类,每实例化一个对象就计数;
#最终所有的对象共享这个数据;
class Foo:
    count = 0
    def __init__(self):
        Foo.count +=1

f1=Foo()
f2=Foo()
print(f1.count)
print(f2.count)

5. 绑定方法:实例对象调解类内的方法时,这个实例对象就和这个方法产生了绑定,即绑定方法;

def func():
    pass

class Foo():
    def func(self):
        print(‘func‘)

f1=Foo()
print(func)
print(Foo.func)
print(f1)  #
print(f1.func) # f1与类Foo.func方法绑定

绑定方法

原文地址:https://www.cnblogs.com/quiet-sun/p/12368744.html

时间: 2024-11-10 07:54:53

类的命令空间的相关文章

1、自学——Linux的学习进度与任务【时间日期管理类的命令】

时间日期管理类的命令 时间日期管理类的命令:  # date :显示 # date MMDDhhmm[CC]YY.ss :设定 # date [+FORMAT] %Y:4位年份 %y:  2位年份 %M:  分 %m:月 %d:  日 %H:  时 %S:  秒 %T: 时间(以冒号隔开) %D:日期 %F: 日期(以横杆隔开) unix元年:1970-01-01 00:00:00 %s:timestamp:从unix元年开始到此刻所经历的秒数 # cal   :    显示日历 # cal #

3、自学——Linux的学习进度与任务【系统管理类的命令】

系统管理类的命令 系统管理类的命令: # shutdown(命令)[option]... TIME -r:  重启 -h: 关机 -c:  取消重启或关机命令 时间格式:      now       +#: #分钟以后 hh:mm:  在指定的时间关机 # reboot:  重启主机操作 -p:调用shutdown完成自己,关机再断电 -f:不调用shutdown,强行关机,不推荐使用这个 # halt:          执行关机操作,但是不会断掉电源 # poweroff: 断电

目录管理类的命令

目录管理类的命令: mkdir, rmdir mkdir:make directories mkdir [OPTION]... DIRECTORY... -p: 自动按需创建父目录: -v: verbose,显示详细过程: -m MODE:直接给定权限: 注意:路径基名方为命令的作用对象:基名之前的路径必须得存在: rmdir:remove empty directories rmdir [OPTION]... DIRECTORY... -p:删除某目录后,如果其父目录为空,则一并删除之: -v

静态成员变量不占用类的内存空间

假定程序运行环境为:操作系统Windows 2000,VC6.0编译环境,X86(80586)CPU处理器(32位小字节序处理器,4字节对齐) class CExample { public:     CExample();     virtual ~CExample(); private:     static int m_iValue1;     int m_iValue2; } 类CExample的一个对象CExampleobj,那么sizeof(CExampleobj) = (). A.

玩转linux第四天之用户及组管理类相关命令(二)

1    前言 本文档主要介绍用户及组管理类相关命令如:useradd .usermod.passwd.userdel.groupadd.groupmod\gpasswd.groupdel.hage,chsh,chfn,.id,w,who,whoami.wck,gourpck.su,并提供相应案例解释其含义. 学习这些基础命令是一个Linux爱好者需要具备的首要条件,让小编带领你们进入Linux的世界看看它的一颦一笑. 读者对象 本文档(本指南)主要适用于以下人员: Linux爱好者 2    

C#设置有命令空间的属性

之前被问到一个问题,C#中如何设置android:name这样的属性?我的第一反应是直接setAttribute不就可以了么 SetAttribute(name, value), 可事实上却不行,因为本身并没有什么C#的开发经验,周围也没什么人搞这个,所以就只能通过搜索了.   最后通过搜索发现它需要指定命令空间,详情可参考这里>> SetAttribute(localName, namespaceURI, value) 所以设置android:name的方法就类似这样: xx.SetAttr

C++ 空类与多重继承的空类占用内存空间

1.输出以代码结果 #include <iostream> using namespace std; class A {}; class A2 {}; class B : public A {}; class C : public A, public A2 {}; class D : public virtual B {}; int main() { cout << sizeof(A) << endl; cout << sizeof(B) <<

Linux系统下的文件管理类常命令及使用方式

Linux上的文件管理类命令有哪些,常用的使用方式 文件系统操作命令分为:目录操作命令.文件操作命令.权限操作命令 目录操作命令: ls 列出目录的属性信息 pwd 列出用户当前所处目录路径 du 列出目录占用磁盘空间大小 cd 改变用户的当前目录 mkdir 建立一个新目录 rmdir 删除一个目录及其中的文件 文件操作命令 df 用于报告文件系统的总容量,使用量,剩余量. find 在指定路径找文件 whereis 查找一个命令相关信息放在那 grep 在指定文件中查找指定的字符串 cat

linux用户和管理类常用命令

1.列出当前系统上所有已经等了的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. 2.取出最后登录到当前系统的用户的相关信息 3.取出当前系统上被用户当作其默认shell的最多的那个shell. 4.将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中. 5.取出当前主机的IP地址,提示:对ifconfig命令进行切分.  6.取出/etc/目录下所有以.com结尾的文件的文件名,并将其名字转换为大写后保存至/t