码迷,mamicode.com
首页 > 其他好文 > 详细

类的命令空间

时间:2020-02-26 22:54:43      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:style   绑定   命令   close   print   不可变   ice   实例名   col   

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方法绑定
绑定方法

技术图片

 

类的命令空间

标签:style   绑定   命令   close   print   不可变   ice   实例名   col   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!